dom.generated.d.ts.text/////////////////////////////
/// IE DOM APIs
/////////////////////////////
interface PositionOptions {
enableHighAccuracy?: boolean;
timeout?: number;
maximumAge?: number;
}
interface ObjectURLOptions {
oneTimeOnly?: boolean;
}
interface StoreExceptionsInformation extends ExceptionInformation {
siteName?: string;
explanationString?: string;
detailURI?: string;
}
interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation {
arrayOfDomainStrings?: string[];
}
interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation {
arrayOfDomainStrings?: string[];
}
interface AlgorithmParameters {
}
interface MutationObserverInit {
childList?: boolean;
attributes?: boolean;
characterData?: boolean;
subtree?: boolean;
attributeOldValue?: boolean;
characterDataOldValue?: boolean;
attributeFilter?: string[];
}
interface PointerEventInit extends MouseEventInit {
pointerId?: number;
width?: number;
height?: number;
pressure?: number;
tiltX?: number;
tiltY?: number;
pointerType?: string;
isPrimary?: boolean;
}
interface ExceptionInformation {
domain?: string;
}
interface DeviceAccelerationDict {
x?: number;
y?: number;
z?: number;
}
interface MsZoomToOptions {
contentX?: number;
contentY?: number;
viewportX?: string;
viewportY?: string;
scaleFactor?: number;
animate?: string;
}
interface DeviceRotationRateDict {
alpha?: number;
beta?: number;
gamma?: number;
}
interface Algorithm {
name?: string;
params?: AlgorithmParameters;
}
interface MouseEventInit {
bubbles?: boolean;
cancelable?: boolean;
view?: Window;
detail?: number;
screenX?: number;
screenY?: number;
clientX?: number;
clientY?: number;
ctrlKey?: boolean;
shiftKey?: boolean;
altKey?: boolean;
metaKey?: boolean;
button?: number;
buttons?: number;
relatedTarget?: EventTarget;
}
interface WebGLContextAttributes {
alpha?: boolean;
depth?: boolean;
stencil?: boolean;
antialias?: boolean;
premultipliedAlpha?: boolean;
preserveDrawingBuffer?: boolean;
}
interface NodeListOf<TNode extends Node> extends NodeList {
length: number;
item(index: number): TNode;
[index: number]: TNode;
}
interface HTMLElement extends Element, ElementCSSInlineStyle, MSEventAttachmentTarget, MSNodeExtensions {
hidden: any;
readyState: any;
onmouseleave: (ev: MouseEvent) => any;
onbeforecut: (ev: DragEvent) => any;
onkeydown: (ev: KeyboardEvent) => any;
onmove: (ev: MSEventObj) => any;
onkeyup: (ev: KeyboardEvent) => any;
onreset: (ev: Event) => any;
onhelp: (ev: Event) => any;
ondragleave: (ev: DragEvent) => any;
className: string;
onfocusin: (ev: FocusEvent) => any;
onseeked: (ev: Event) => any;
recordNumber: any;
title: string;
parentTextEdit: Element;
outerHTML: string;
ondurationchange: (ev: Event) => any;
offsetHeight: number;
all: HTMLCollection;
onblur: (ev: FocusEvent) => any;
dir: string;
onemptied: (ev: Event) => any;
onseeking: (ev: Event) => any;
oncanplay: (ev: Event) => any;
ondeactivate: (ev: UIEvent) => any;
ondatasetchanged: (ev: MSEventObj) => any;
onrowsdelete: (ev: MSEventObj) => any;
sourceIndex: number;
onloadstart: (ev: Event) => any;
onlosecapture: (ev: MSEventObj) => any;
ondragenter: (ev: DragEvent) => any;
oncontrolselect: (ev: MSEventObj) => any;
onsubmit: (ev: Event) => any;
behaviorUrns: MSBehaviorUrnsCollection;
scopeName: string;
onchange: (ev: Event) => any;
id: string;
onlayoutcomplete: (ev: MSEventObj) => any;
uniqueID: string;
onbeforeactivate: (ev: UIEvent) => any;
oncanplaythrough: (ev: Event) => any;
onbeforeupdate: (ev: MSEventObj) => any;
onfilterchange: (ev: MSEventObj) => any;
offsetParent: Element;
ondatasetcomplete: (ev: MSEventObj) => any;
onsuspend: (ev: Event) => any;
onmouseenter: (ev: MouseEvent) => any;
innerText: string;
onerrorupdate: (ev: MSEventObj) => any;
onmouseout: (ev: MouseEvent) => any;
parentElement: HTMLElement;
onmousewheel: (ev: MouseWheelEvent) => any;
onvolumechange: (ev: Event) => any;
oncellchange: (ev: MSEventObj) => any;
onrowexit: (ev: MSEventObj) => any;
onrowsinserted: (ev: MSEventObj) => any;
onpropertychange: (ev: MSEventObj) => any;
filters: any;
children: HTMLCollection;
ondragend: (ev: DragEvent) => any;
onbeforepaste: (ev: DragEvent) => any;
ondragover: (ev: DragEvent) => any;
offsetTop: number;
onmouseup: (ev: MouseEvent) => any;
ondragstart: (ev: DragEvent) => any;
onbeforecopy: (ev: DragEvent) => any;
ondrag: (ev: DragEvent) => any;
innerHTML: string;
onmouseover: (ev: MouseEvent) => any;
lang: string;
uniqueNumber: number;
onpause: (ev: Event) => any;
tagUrn: string;
onmousedown: (ev: MouseEvent) => any;
onclick: (ev: MouseEvent) => any;
onwaiting: (ev: Event) => any;
onresizestart: (ev: MSEventObj) => any;
offsetLeft: number;
isTextEdit: boolean;
isDisabled: boolean;
onpaste: (ev: DragEvent) => any;
canHaveHTML: boolean;
onmoveend: (ev: MSEventObj) => any;
language: string;
onstalled: (ev: Event) => any;
onmousemove: (ev: MouseEvent) => any;
style: MSStyleCSSProperties;
isContentEditable: boolean;
onbeforeeditfocus: (ev: MSEventObj) => any;
onratechange: (ev: Event) => any;
contentEditable: string;
tabIndex: number;
document: Document;
onprogress: (ev: ProgressEvent) => any;
ondblclick: (ev: MouseEvent) => any;
oncontextmenu: (ev: MouseEvent) => any;
onloadedmetadata: (ev: Event) => any;
onafterupdate: (ev: MSEventObj) => any;
onerror: (ev: ErrorEvent) => any;
onplay: (ev: Event) => any;
onresizeend: (ev: MSEventObj) => any;
onplaying: (ev: Event) => any;
isMultiLine: boolean;
onfocusout: (ev: FocusEvent) => any;
onabort: (ev: UIEvent) => any;
ondataavailable: (ev: MSEventObj) => any;
hideFocus: boolean;
onreadystatechange: (ev: Event) => any;
onkeypress: (ev: KeyboardEvent) => any;
onloadeddata: (ev: Event) => any;
onbeforedeactivate: (ev: UIEvent) => any;
outerText: string;
disabled: boolean;
onactivate: (ev: UIEvent) => any;
accessKey: string;
onmovestart: (ev: MSEventObj) => any;
onselectstart: (ev: Event) => any;
onfocus: (ev: FocusEvent) => any;
ontimeupdate: (ev: Event) => any;
onresize: (ev: UIEvent) => any;
oncut: (ev: DragEvent) => any;
onselect: (ev: UIEvent) => any;
ondrop: (ev: DragEvent) => any;
offsetWidth: number;
oncopy: (ev: DragEvent) => any;
onended: (ev: Event) => any;
onscroll: (ev: UIEvent) => any;
onrowenter: (ev: MSEventObj) => any;
onload: (ev: Event) => any;
canHaveChildren: boolean;
oninput: (ev: Event) => any;
onmscontentzoom: (ev: MSEventObj) => any;
oncuechange: (ev: Event) => any;
spellcheck: boolean;
classList: DOMTokenList;
onmsmanipulationstatechanged: (ev: any) => any;
draggable: boolean;
dataset: DOMStringMap;
dragDrop(): boolean;
scrollIntoView(top?: boolean): void;
addFilter(filter: any): void;
setCapture(containerCapture?: boolean): void;
focus(): void;
getAdjacentText(where: string): string;
insertAdjacentText(where: string, text: string): void;
getElementsByClassName(classNames: string): NodeList;
setActive(): void;
removeFilter(filter: any): void;
blur(): void;
clearAttributes(): void;
releaseCapture(): void;
createControlRange(): ControlRangeCollection;
removeBehavior(cookie: number): boolean;
contains(child: HTMLElement): boolean;
click(): void;
insertAdjacentElement(position: string, insertedElement: Element): Element;
mergeAttributes(source: HTMLElement, preserveIdentity?: boolean): void;
replaceAdjacentText(where: string, newText: string): string;
applyElement(apply: Element, where?: string): Element;
addBehavior(bstrUrl: string, factory?: any): number;
insertAdjacentHTML(where: string, html: string): void;
msGetInputContext(): MSInputMethodContext;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLElement: {
prototype: HTMLElement;
new(): HTMLElement;
}
interface Document extends Node, NodeSelector, MSEventAttachmentTarget, DocumentEvent, MSResourceMetadata, MSNodeExtensions, MSDocumentExtensions, GlobalEventHandlers {
/**
* Gets a reference to the root node of the document.
*/
documentElement: HTMLElement;
/**
* Retrieves the collection of user agents and versions declared in the X-UA-Compatible
*/
compatible: MSCompatibleInfoCollection;
/**
* Fires when the user presses a key.
* @param ev The keyboard event
*/
onkeydown: (ev: KeyboardEvent) => any;
/**
* Fires when the user releases a key.
* @param ev The keyboard event
*/
onkeyup: (ev: KeyboardEvent) => any;
/**
* Gets the implementation object of the current document.
*/
implementation: DOMImplementation;
/**
* Fires when the user resets a form.
* @param ev The event.
*/
onreset: (ev: Event) => any;
/**
* Retrieves a collection of all script objects in the document.
*/
scripts: HTMLCollection;
/**
* Fires when the user presses the F1 key while the browser is the active window.
* @param ev The event.
*/
onhelp: (ev: Event) => any;
/**
* Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
* @param ev The drag event.
*/
ondragleave: (ev: DragEvent) => any;
/**
* Gets or sets the character set used to encode the object.
*/
charset: string;
/**
* Fires for an element just prior to setting focus on that element.
* @param ev The focus event
*/
onfocusin: (ev: FocusEvent) => any;
/**
* Sets or gets the color of the links that the user has visited.
*/
vlinkColor: string;
/**
* Occurs when the seek operation ends.
* @param ev The event.
*/
onseeked: (ev: Event) => any;
security: string;
/**
* Contains the title of the document.
*/
title: string;
/**
* Retrieves a collection of namespace objects.
*/
namespaces: MSNamespaceInfoCollection;
/**
* Gets the default character set from the current regional language settings.
*/
defaultCharset: string;
/**
* Retrieves a collection of all embed objects in the document.
*/
embeds: HTMLCollection;
/**
* Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
*/
styleSheets: StyleSheetList;
/**
* Retrieves a collection of all window objects defined by the given document or defined by the document associated with the given window.
*/
frames: Window;
/**
* Occurs when the duration attribute is updated.
* @param ev The event.
*/
ondurationchange: (ev: Event) => any;
/**
* Returns a reference to the collection of elements contained by the object.
*/
all: HTMLCollection;
/**
* Retrieves a collection, in source order, of all form objects in the document.
*/
forms: HTMLCollection;
/**
* Fires when the object loses the input focus.
* @param ev The focus event.
*/
onblur: (ev: FocusEvent) => any;
/**
* Sets or retrieves a value that indicates the reading order of the object.
*/
dir: string;
/**
* Occurs when the media element is reset to its initial state.
* @param ev The event.
*/
onemptied: (ev: Event) => any;
/**
* Sets or gets a value that indicates whether the document can be edited.
*/
designMode: string;
/**
* Occurs when the current playback position is moved.
* @param ev The event.
*/
onseeking: (ev: Event) => any;
/**
* Fires when the activeElement is changed from the current object to another object in the parent document.
* @param ev The UI Event
*/
ondeactivate: (ev: UIEvent) => any;
/**
* Occurs when playback is possible, but would require further buffering.
* @param ev The event.
*/
oncanplay: (ev: Event) => any;
/**
* Fires when the data set exposed by a data source object changes.
* @param ev The event.
*/
ondatasetchanged: (ev: MSEventObj) => any;
/**
* Fires when rows are about to be deleted from the recordset.
* @param ev The event
*/
onrowsdelete: (ev: MSEventObj) => any;
Script: MSScriptHost;
/**
* Occurs when Internet Explorer begins looking for media data.
* @param ev The event.
*/
onloadstart: (ev: Event) => any;
/**
* Gets the URL for the document, stripped of any character encoding.
*/
URLUnencoded: string;
defaultView: Window;
/**
* Fires when the user is about to make a control selection of the object.
* @param ev The event.
*/
oncontrolselect: (ev: MSEventObj) => any;
/**
* Fires on the target element when the user drags the object to a valid drop target.
* @param ev The drag event.
*/
ondragenter: (ev: DragEvent) => any;
onsubmit: (ev: Event) => any;
/**
* Returns the character encoding used to create the webpage that is loaded into the document object.
*/
inputEncoding: string;
/**
* Gets the object that has the focus when the parent document has focus.
*/
activeElement: Element;
/**
* Fires when the contents of the object or selection have changed.
* @param ev The event.
*/
onchange: (ev: Event) => any;
/**
* Retrieves a collection of all a objects that specify the href property and all area objects in the document.
*/
links: HTMLCollection;
/**
* Retrieves an autogenerated, unique identifier for the object.
*/
uniqueID: string;
/**
* Sets or gets the URL for the current document.
*/
URL: string;
/**
* Fires immediately before the object is set as the active element.
* @param ev The event.
*/
onbeforeactivate: (ev: UIEvent) => any;
head: HTMLHeadElement;
cookie: string;
xmlEncoding: string;
oncanplaythrough: (ev: Event) => any;
/**
* Retrieves the document compatibility mode of the document.
*/
documentMode: number;
characterSet: string;
/**
* Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
*/
anchors: HTMLCollection;
onbeforeupdate: (ev: MSEventObj) => any;
/**
* Fires to indicate that all data is available from the data source object.
* @param ev The event.
*/
ondatasetcomplete: (ev: MSEventObj) => any;
plugins: HTMLCollection;
/**
* Occurs if the load operation has been intentionally halted.
* @param ev The event.
*/
onsuspend: (ev: Event) => any;
/**
* Gets the root svg element in the document hierarchy.
*/
rootElement: SVGSVGElement;
/**
* Retrieves a value that indicates the current state of the object.
*/
readyState: string;
/**
* Gets the URL of the location that referred the user to the current page.
*/
referrer: string;
/**
* Sets or gets the color of all active links in the document.
*/
alinkColor: string;
/**
* Fires on a databound object when an error occurs while updating the associated data in the data source object.
* @param ev The event.
*/
onerrorupdate: (ev: MSEventObj) => any;
/**
* Gets a reference to the container object of the window.
*/
parentWindow: Window;
/**
* Fires when the user moves the mouse pointer outside the boundaries of the object.
* @param ev The mouse event.
*/
onmouseout: (ev: MouseEvent) => any;
/**
* Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode.
* @param ev The event.
*/
onmsthumbnailclick: (ev: MSSiteModeEvent) => any;
/**
* Fires when the wheel button is rotated.
* @param ev The mouse event
*/
onmousewheel: (ev: MouseWheelEvent) => any;
/**
* Occurs when the volume is changed, or playback is muted or unmuted.
* @param ev The event.
*/
onvolumechange: (ev: Event) => any;
/**
* Fires when data changes in the data provider.
* @param ev The event.
*/
oncellchange: (ev: MSEventObj) => any;
/**
* Fires just before the data source control changes the current row in the object.
* @param ev The event.
*/
onrowexit: (ev: MSEventObj) => any;
/**
* Fires just after new rows are inserted in the current recordset.
* @param ev The event.
*/
onrowsinserted: (ev: MSEventObj) => any;
/**
* Gets or sets the version attribute specified in the declaration of an XML document.
*/
xmlVersion: string;
msCapsLockWarningOff: boolean;
/**
* Fires when a property changes on the object.
* @param ev The event.
*/
onpropertychange: (ev: MSEventObj) => any;
/**
* Fires on the source object when the user releases the mouse at the close of a drag operation.
* @param ev The event.
*/
ondragend: (ev: DragEvent) => any;
/**
* Gets an object representing the document type declaration associated with the current document.
*/
doctype: DocumentType;
/**
* Fires on the target element continuously while the user drags the object over a valid drop target.
* @param ev The event.
*/
ondragover: (ev: DragEvent) => any;
/**
* Deprecated. Sets or retrieves a value that indicates the background color behind the object.
*/
bgColor: string;
/**
* Fires on the source object when the user starts to drag a text selection or selected object.
* @param ev The event.
*/
ondragstart: (ev: DragEvent) => any;
/**
* Fires when the user releases a mouse button while the mouse is over the object.
* @param ev The mouse event.
*/
onmouseup: (ev: MouseEvent) => any;
/**
* Fires on the source object continuously during a drag operation.
* @param ev The event.
*/
ondrag: (ev: DragEvent) => any;
/**
* Fires when the user moves the mouse pointer into the object.
* @param ev The mouse event.
*/
onmouseover: (ev: MouseEvent) => any;
/**
* Sets or gets the color of the document links.
*/
linkColor: string;
/**
* Occurs when playback is paused.
* @param ev The event.
*/
onpause: (ev: Event) => any;
/**
* Fires when the user clicks the object with either mouse button.
* @param ev The mouse event.
*/
onmousedown: (ev: MouseEvent) => any;
/**
* Fires when the user clicks the left mouse button on the object
* @param ev The mouse event.
*/
onclick: (ev: MouseEvent) => any;
/**
* Occurs when playback stops because the next frame of a video resource is not available.
* @param ev The event.
*/
onwaiting: (ev: Event) => any;
/**
* Fires when the user clicks the Stop button or leaves the Web page.
* @param ev The event.
*/
onstop: (ev: Event) => any;
/**
* Occurs when an item is removed from a Jump List of a webpage running in Site Mode.
* @param ev The event.
*/
onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any;
/**
* Retrieves a collection of all applet objects in the document.
*/
applets: HTMLCollection;
/**
* Specifies the beginning and end of the document body.
*/
body: HTMLElement;
/**
* Sets or gets the security domain of the document.
*/
domain: string;
xmlStandalone: boolean;
/**
* Represents the active selection, which is a highlighted block of text or other elements in the document that a user or a script can carry out some action on.
*/
selection: MSSelection;
/**
* Occurs when the download has stopped.
* @param ev The event.
*/
onstalled: (ev: Event) => any;
/**
* Fires when the user moves the mouse over the object.
* @param ev The mouse event.
*/
onmousemove: (ev: MouseEvent) => any;
/**
* Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected.
* @param ev The event.
*/
onbeforeeditfocus: (ev: MSEventObj) => any;
/**
* Occurs when the playback rate is increased or decreased.
* @param ev The event.
*/
onratechange: (ev: Event) => any;
/**
* Occurs to indicate progress while downloading media data.
* @param ev The event.
*/
onprogress: (ev: ProgressEvent) => any;
/**
* Fires when the user double-clicks the object.
* @param ev The mouse event.
*/
ondblclick: (ev: MouseEvent) => any;
/**
* Fires when the user clicks the right mouse button in the client area, opening the context menu.
* @param ev The mouse event.
*/
oncontextmenu: (ev: MouseEvent) => any;
/**
* Occurs when the duration and dimensions of the media have been determined.
* @param ev The event.
*/
onloadedmetadata: (ev: Event) => any;
media: string;
/**
* Fires when an error occurs during object loading.
* @param ev The event.
*/
onerror: (ev: ErrorEvent) => any;
/**
* Occurs when the play method is requested.
* @param ev The event.
*/
onplay: (ev: Event) => any;
onafterupdate: (ev: MSEventObj) => any;
/**
* Occurs when the audio or video has started playing.
* @param ev The event.
*/
onplaying: (ev: Event) => any;
/**
* Retrieves a collection, in source order, of img objects in the document.
*/
images: HTMLCollection;
/**
* Contains information about the current URL.
*/
location: Location;
/**
* Fires when the user aborts the download.
* @param ev The event.
*/
onabort: (ev: UIEvent) => any;
/**
* Fires for the current element with focus immediately after moving focus to another element.
* @param ev The event.
*/
onfocusout: (ev: FocusEvent) => any;
/**
* Fires when the selection state of a document changes.
* @param ev The event.
*/
onselectionchange: (ev: Event) => any;
/**
* Fires when a local DOM Storage area is written to disk.
* @param ev The event.
*/
onstoragecommit: (ev: StorageEvent) => any;
/**
* Fires periodically as data arrives from data source objects that asynchronously transmit their data.
* @param ev The event.
*/
ondataavailable: (ev: MSEventObj) => any;
/**
* Fires when the state of the object has changed.
* @param ev The event
*/
onreadystatechange: (ev: Event) => any;
/**
* Gets the date that the page was last modified, if the page supplies one.
*/
lastModified: string;
/**
* Fires when the user presses an alphanumeric key.
* @param ev The event.
*/
onkeypress: (ev: KeyboardEvent) => any;
/**
* Occurs when media data is loaded at the current playback position.
* @param ev The event.
*/
onloadeddata: (ev: Event) => any;
/**
* Fires immediately before the activeElement is changed from the current object to another object in the parent document.
* @param ev The event.
*/
onbeforedeactivate: (ev: UIEvent) => any;
/**
* Fires when the object is set as the active element.
* @param ev The event.
*/
onactivate: (ev: UIEvent) => any;
onselectstart: (ev: Event) => any;
/**
* Fires when the object receives focus.
* @param ev The event.
*/
onfocus: (ev: FocusEvent) => any;
/**
* Sets or gets the foreground (text) color of the document.
*/
fgColor: string;
/**
* Occurs to indicate the current playback position.
* @param ev The event.
*/
ontimeupdate: (ev: Event) => any;
/**
* Fires when the current selection changes.
* @param ev The event.
*/
onselect: (ev: UIEvent) => any;
ondrop: (ev: DragEvent) => any;
/**
* Occurs when the end of playback is reached.
* @param ev The event
*/
onended: (ev: Event) => any;
/**
* Gets a value that indicates whether standards-compliant mode is switched on for the object.
*/
compatMode: string;
/**
* Fires when the user repositions the scroll box in the scroll bar on the object.
* @param ev The event.
*/
onscroll: (ev: UIEvent) => any;
/**
* Fires to indicate that the current row has changed in the data source and new data values are available on the object.
* @param ev The event.
*/
onrowenter: (ev: MSEventObj) => any;
/**
* Fires immediately after the browser loads the object.
* @param ev The event.
*/
onload: (ev: Event) => any;
oninput: (ev: Event) => any;
onmspointerdown: (ev: any) => any;
msHidden: boolean;
msVisibilityState: string;
onmsgesturedoubletap: (ev: any) => any;
visibilityState: string;
onmsmanipulationstatechanged: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmscontentzoom: (ev: MSEventObj) => any;
onmspointermove: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
onmsinertiastart: (ev: any) => any;
msCSSOMElementFloatMetrics: boolean;
onmspointerover: (ev: any) => any;
hidden: boolean;
onmspointerup: (ev: any) => any;
msFullscreenEnabled: boolean;
onmsfullscreenerror: (ev: any) => any;
onmspointerenter: (ev: any) => any;
msFullscreenElement: Element;
onmsfullscreenchange: (ev: any) => any;
onmspointerleave: (ev: any) => any;
/**
* Returns a reference to the first object with the specified value of the ID or NAME attribute.
* @param elementId String that specifies the ID value. Case-insensitive.
*/
getElementById(elementId: string): HTMLElement;
/**
* Returns the current value of the document, range, or current selection for the given command.
* @param commandId String that specifies a command identifier.
*/
queryCommandValue(commandId: string): string;
adoptNode(source: Node): Node;
/**
* Returns a Boolean value that indicates whether the specified command is in the indeterminate state.
* @param commandId String that specifies a command identifier.
*/
queryCommandIndeterm(commandId: string): boolean;
getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
createProcessingInstruction(target: string, data: string): ProcessingInstruction;
/**
* Executes a command on the current document, current selection, or the given range.
* @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
* @param showUI Display the user interface, defaults to false.
* @param value Value to assign.
*/
execCommand(commandId: string, showUI?: boolean, value?: any): boolean;
/**
* Returns the element for the specified x coordinate and the specified y coordinate.
* @param x The x-offset
* @param y The y-offset
*/
elementFromPoint(x: number, y: number): Element;
createCDATASection(data: string): CDATASection;
/**
* Retrieves the string associated with a command.
* @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers.
*/
queryCommandText(commandId: string): string;
/**
* Writes one or more HTML expressions to a document in the specified window.
* @param content Specifies the text and HTML tags to write.
*/
write(...content: string[]): void;
/**
* Allows updating the print settings for the page.
*/
updateSettings(): void;
/**
* Creates an instance of the element for the specified tag.
* @param tagName The name of an element.
*/
createElement(tagName: "a"): HTMLAnchorElement;
createElement(tagName: "abbr"): HTMLPhraseElement;
createElement(tagName: "acronym"): HTMLPhraseElement;
createElement(tagName: "address"): HTMLBlockElement;
createElement(tagName: "applet"): HTMLAppletElement;
createElement(tagName: "area"): HTMLAreaElement;
createElement(tagName: "article"): HTMLElement;
createElement(tagName: "aside"): HTMLElement;
createElement(tagName: "audio"): HTMLAudioElement;
createElement(tagName: "b"): HTMLPhraseElement;
createElement(tagName: "base"): HTMLBaseElement;
createElement(tagName: "basefont"): HTMLBaseFontElement;
createElement(tagName: "bdo"): HTMLPhraseElement;
createElement(tagName: "bgsound"): HTMLBGSoundElement;
createElement(tagName: "big"): HTMLPhraseElement;
createElement(tagName: "blockquote"): HTMLBlockElement;
createElement(tagName: "body"): HTMLBodyElement;
createElement(tagName: "br"): HTMLBRElement;
createElement(tagName: "button"): HTMLButtonElement;
createElement(tagName: "canvas"): HTMLCanvasElement;
createElement(tagName: "caption"): HTMLTableCaptionElement;
createElement(tagName: "center"): HTMLBlockElement;
createElement(tagName: "cite"): HTMLPhraseElement;
createElement(tagName: "code"): HTMLPhraseElement;
createElement(tagName: "col"): HTMLTableColElement;
createElement(tagName: "colgroup"): HTMLTableColElement;
createElement(tagName: "datalist"): HTMLDataListElement;
createElement(tagName: "dd"): HTMLDDElement;
createElement(tagName: "del"): HTMLModElement;
createElement(tagName: "dfn"): HTMLPhraseElement;
createElement(tagName: "dir"): HTMLDirectoryElement;
createElement(tagName: "div"): HTMLDivElement;
createElement(tagName: "dl"): HTMLDListElement;
createElement(tagName: "dt"): HTMLDTElement;
createElement(tagName: "em"): HTMLPhraseElement;
createElement(tagName: "embed"): HTMLEmbedElement;
createElement(tagName: "fieldset"): HTMLFieldSetElement;
createElement(tagName: "figcaption"): HTMLElement;
createElement(tagName: "figure"): HTMLElement;
createElement(tagName: "font"): HTMLFontElement;
createElement(tagName: "footer"): HTMLElement;
createElement(tagName: "form"): HTMLFormElement;
createElement(tagName: "frame"): HTMLFrameElement;
createElement(tagName: "frameset"): HTMLFrameSetElement;
createElement(tagName: "h1"): HTMLHeadingElement;
createElement(tagName: "h2"): HTMLHeadingElement;
createElement(tagName: "h3"): HTMLHeadingElement;
createElement(tagName: "h4"): HTMLHeadingElement;
createElement(tagName: "h5"): HTMLHeadingElement;
createElement(tagName: "h6"): HTMLHeadingElement;
createElement(tagName: "head"): HTMLHeadElement;
createElement(tagName: "header"): HTMLElement;
createElement(tagName: "hgroup"): HTMLElement;
createElement(tagName: "hr"): HTMLHRElement;
createElement(tagName: "html"): HTMLHtmlElement;
createElement(tagName: "i"): HTMLPhraseElement;
createElement(tagName: "iframe"): HTMLIFrameElement;
createElement(tagName: "img"): HTMLImageElement;
createElement(tagName: "input"): HTMLInputElement;
createElement(tagName: "ins"): HTMLModElement;
createElement(tagName: "isindex"): HTMLIsIndexElement;
createElement(tagName: "kbd"): HTMLPhraseElement;
createElement(tagName: "keygen"): HTMLBlockElement;
createElement(tagName: "label"): HTMLLabelElement;
createElement(tagName: "legend"): HTMLLegendElement;
createElement(tagName: "li"): HTMLLIElement;
createElement(tagName: "link"): HTMLLinkElement;
createElement(tagName: "listing"): HTMLBlockElement;
createElement(tagName: "map"): HTMLMapElement;
createElement(tagName: "mark"): HTMLElement;
createElement(tagName: "marquee"): HTMLMarqueeElement;
createElement(tagName: "menu"): HTMLMenuElement;
createElement(tagName: "meta"): HTMLMetaElement;
createElement(tagName: "nav"): HTMLElement;
createElement(tagName: "nextid"): HTMLNextIdElement;
createElement(tagName: "nobr"): HTMLPhraseElement;
createElement(tagName: "noframes"): HTMLElement;
createElement(tagName: "noscript"): HTMLElement;
createElement(tagName: "object"): HTMLObjectElement;
createElement(tagName: "ol"): HTMLOListElement;
createElement(tagName: "optgroup"): HTMLOptGroupElement;
createElement(tagName: "option"): HTMLOptionElement;
createElement(tagName: "p"): HTMLParagraphElement;
createElement(tagName: "param"): HTMLParamElement;
createElement(tagName: "plaintext"): HTMLBlockElement;
createElement(tagName: "pre"): HTMLPreElement;
createElement(tagName: "progress"): HTMLProgressElement;
createElement(tagName: "q"): HTMLQuoteElement;
createElement(tagName: "rt"): HTMLPhraseElement;
createElement(tagName: "ruby"): HTMLPhraseElement;
createElement(tagName: "s"): HTMLPhraseElement;
createElement(tagName: "samp"): HTMLPhraseElement;
createElement(tagName: "script"): HTMLScriptElement;
createElement(tagName: "section"): HTMLElement;
createElement(tagName: "select"): HTMLSelectElement;
createElement(tagName: "small"): HTMLPhraseElement;
createElement(tagName: "SOURCE"): HTMLSourceElement;
createElement(tagName: "span"): HTMLSpanElement;
createElement(tagName: "strike"): HTMLPhraseElement;
createElement(tagName: "strong"): HTMLPhraseElement;
createElement(tagName: "style"): HTMLStyleElement;
createElement(tagName: "sub"): HTMLPhraseElement;
createElement(tagName: "sup"): HTMLPhraseElement;
createElement(tagName: "table"): HTMLTableElement;
createElement(tagName: "tbody"): HTMLTableSectionElement;
createElement(tagName: "td"): HTMLTableDataCellElement;
createElement(tagName: "textarea"): HTMLTextAreaElement;
createElement(tagName: "tfoot"): HTMLTableSectionElement;
createElement(tagName: "th"): HTMLTableHeaderCellElement;
createElement(tagName: "thead"): HTMLTableSectionElement;
createElement(tagName: "title"): HTMLTitleElement;
createElement(tagName: "tr"): HTMLTableRowElement;
createElement(tagName: "track"): HTMLTrackElement;
createElement(tagName: "tt"): HTMLPhraseElement;
createElement(tagName: "u"): HTMLPhraseElement;
createElement(tagName: "ul"): HTMLUListElement;
createElement(tagName: "var"): HTMLPhraseElement;
createElement(tagName: "video"): HTMLVideoElement;
createElement(tagName: "wbr"): HTMLElement;
createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement;
createElement(tagName: "xmp"): HTMLBlockElement;
createElement(tagName: string): HTMLElement;
/**
* Removes mouse capture from the object in the current document.
*/
releaseCapture(): void;
/**
* Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window.
* @param content The text and HTML tags to write.
*/
writeln(...content: string[]): void;
createElementNS(namespaceURI: string, qualifiedName: string): Element;
/**
* Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.
* @param url Specifies a MIME type for the document.
* @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.
* @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.
* @param replace Specifies whether the existing entry for the document is replaced in the history list.
*/
open(url?: string, name?: string, features?: string, replace?: boolean): any;
/**
* Returns a Boolean value that indicates whether the current command is supported on the current range.
* @param commandId Specifies a command identifier.
*/
queryCommandSupported(commandId: string): boolean;
/**
* Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.
* @param root The root element or node to start traversing on.
* @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.
* @param filter A custom NodeFilter function to use.
* @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
*/
createTreeWalker(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): TreeWalker;
createAttributeNS(namespaceURI: string, qualifiedName: string): Attr;
/**
* Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.
* @param commandId Specifies a command identifier.
*/
queryCommandEnabled(commandId: string): boolean;
/**
* Causes the element to receive the focus and executes the code specified by the onfocus event.
*/
focus(): void;
/**
* Closes an output stream and forces the sent data to display.
*/
close(): void;
getElementsByClassName(classNames: string): NodeList;
importNode(importedNode: Node, deep: boolean): Node;
/**
* Returns an empty range object that has both of its boundary points positioned at the beginning of the document.
*/
createRange(): Range;
/**
* Fires a specified event on the object.
* @param eventName Specifies the name of the event to fire.
* @param eventObj Object that specifies the event object from which to obtain event object properties.
*/
fireEvent(eventName: string, eventObj?: any): boolean;
/**
* Creates a comment object with the specified data.
* @param data Sets the comment object's data.
*/
createComment(data: string): Comment;
/**
* Retrieves a collection of objects based on the specified element name.
* @param name Specifies the name of an element.
*/
getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "bgsound"): NodeListOf<HTMLBGSoundElement>;
getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "SOURCE"): NodeListOf<HTMLSourceElement>;
getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: string): NodeList;
/**
* Creates a new document.
*/
createDocumentFragment(): DocumentFragment;
/**
* Creates a style sheet for the document.
* @param href Specifies how to add the style sheet to the document. If a file name is specified for the URL, the style information is added as a link object. If the URL contains style information, it is added to the style object.
* @param index Specifies the index that indicates where the new style sheet is inserted in the styleSheets collection. The default is to insert the new style sheet at the end of the collection.
*/
createStyleSheet(href?: string, index?: number): CSSStyleSheet;
/**
* Gets a collection of objects based on the value of the NAME or ID attribute.
* @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.
*/
getElementsByName(elementName: string): NodeList;
/**
* Returns a Boolean value that indicates the current state of the command.
* @param commandId String that specifies a command identifier.
*/
queryCommandState(commandId: string): boolean;
/**
* Gets a value indicating whether the object currently has focus.
*/
hasFocus(): boolean;
/**
* Displays help information for the given command identifier.
* @param commandId Displays help information for the given command identifier.
*/
execCommandShowHelp(commandId: string): boolean;
/**
* Creates an attribute object with a specified name.
* @param name String that sets the attribute object's name.
*/
createAttribute(name: string): Attr;
/**
* Creates a text string from the specified value.
* @param data String that specifies the nodeValue property of the text node.
*/
createTextNode(data: string): Text;
/**
* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
* @param root The root element or node to start traversing on.
* @param whatToShow The type of nodes or elements to appear in the node list
* @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.
* @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
*/
createNodeIterator(root: Node, whatToShow: number, filter: NodeFilter, entityReferenceExpansion: boolean): NodeIterator;
/**
* Generates an event object to pass event context information when you use the fireEvent method.
* @param eventObj An object that specifies an existing event object on which to base the new object.
*/
createEventObject(eventObj?: any): MSEventObj;
/**
* Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.
*/
getSelection(): Selection;
msElementsFromPoint(x: number, y: number): NodeList;
msElementsFromRect(left: number, top: number, width: number, height: number): NodeList;
clear(): void;
msExitFullscreen(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "selectionchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "storagecommit", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msfullscreenerror", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msfullscreenchange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Document: {
prototype: Document;
new(): Document;
}
interface Console {
info(message?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
error(message?: any, ...optionalParams: any[]): void;
log(message?: any, ...optionalParams: any[]): void;
profile(reportName?: string): void;
assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
msIsIndependentlyComposed(element: Element): boolean;
clear(): void;
dir(value?: any, ...optionalParams: any[]): void;
profileEnd(): void;
count(countTitle?: string): void;
groupEnd(): void;
time(timerName?: string): void;
timeEnd(timerName?: string): void;
trace(): void;
group(groupTitle?: string): void;
dirxml(value: any): void;
debug(message?: string, ...optionalParams: any[]): void;
groupCollapsed(groupTitle?: string): void;
select(element: Element): void;
}
declare var Console: {
prototype: Console;
new(): Console;
}
interface MSEventObj extends Event {
nextPage: string;
keyCode: number;
toElement: Element;
returnValue: any;
dataFld: string;
y: number;
dataTransfer: DataTransfer;
propertyName: string;
url: string;
offsetX: number;
recordset: any;
screenX: number;
buttonID: number;
wheelDelta: number;
reason: number;
origin: string;
data: string;
srcFilter: any;
boundElements: HTMLCollection;
cancelBubble: boolean;
altLeft: boolean;
behaviorCookie: number;
bookmarks: BookmarkCollection;
type: string;
repeat: boolean;
srcElement: Element;
source: Window;
fromElement: Element;
offsetY: number;
x: number;
behaviorPart: number;
qualifier: string;
altKey: boolean;
ctrlKey: boolean;
clientY: number;
shiftKey: boolean;
shiftLeft: boolean;
contentOverflow: boolean;
screenY: number;
ctrlLeft: boolean;
button: number;
srcUrn: string;
clientX: number;
actionURL: string;
getAttribute(strAttributeName: string, lFlags?: number): any;
setAttribute(strAttributeName: string, AttributeValue: any, lFlags?: number): void;
removeAttribute(strAttributeName: string, lFlags?: number): boolean;
}
declare var MSEventObj: {
prototype: MSEventObj;
new(): MSEventObj;
}
interface HTMLCanvasElement extends HTMLElement {
/**
* Gets or sets the width of a canvas element on a document.
*/
width: number;
/**
* Gets or sets the height of a canvas element on a document.
*/
height: number;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: "2d"): CanvasRenderingContext2D;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
/**
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
*/
getContext(contextId: string, ...args: any[]): any;
/**
* Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element.
* @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.
*/
toDataURL(type?: string, ...args: any[]): string;
/**
* Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
*/
msToBlob(): Blob;
}
declare var HTMLCanvasElement: {
prototype: HTMLCanvasElement;
new(): HTMLCanvasElement;
}
interface Window extends EventTarget, MSEventAttachmentTarget, WindowLocalStorage, MSWindowExtensions, WindowSessionStorage, WindowTimers, WindowBase64, IDBEnvironment, WindowConsole, GlobalEventHandlers {
ondragend: (ev: DragEvent) => any;
onkeydown: (ev: KeyboardEvent) => any;
ondragover: (ev: DragEvent) => any;
onkeyup: (ev: KeyboardEvent) => any;
onreset: (ev: Event) => any;
onmouseup: (ev: MouseEvent) => any;
ondragstart: (ev: DragEvent) => any;
ondrag: (ev: DragEvent) => any;
screenX: number;
onmouseover: (ev: MouseEvent) => any;
ondragleave: (ev: DragEvent) => any;
history: History;
pageXOffset: number;
name: string;
onafterprint: (ev: Event) => any;
onpause: (ev: Event) => any;
onbeforeprint: (ev: Event) => any;
top: Window;
onmousedown: (ev: MouseEvent) => any;
onseeked: (ev: Event) => any;
opener: Window;
onclick: (ev: MouseEvent) => any;
innerHeight: number;
onwaiting: (ev: Event) => any;
ononline: (ev: Event) => any;
ondurationchange: (ev: Event) => any;
frames: Window;
onblur: (ev: FocusEvent) => any;
onemptied: (ev: Event) => any;
onseeking: (ev: Event) => any;
oncanplay: (ev: Event) => any;
outerWidth: number;
onstalled: (ev: Event) => any;
onmousemove: (ev: MouseEvent) => any;
innerWidth: number;
onoffline: (ev: Event) => any;
length: number;
screen: Screen;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
onratechange: (ev: Event) => any;
onstorage: (ev: StorageEvent) => any;
onloadstart: (ev: Event) => any;
ondragenter: (ev: DragEvent) => any;
onsubmit: (ev: Event) => any;
self: Window;
document: Document;
onprogress: (ev: ProgressEvent) => any;
ondblclick: (ev: MouseEvent) => any;
pageYOffset: number;
oncontextmenu: (ev: MouseEvent) => any;
onchange: (ev: Event) => any;
onloadedmetadata: (ev: Event) => any;
onplay: (ev: Event) => any;
onerror: ErrorEventHandler;
onplaying: (ev: Event) => any;
parent: Window;
location: Location;
oncanplaythrough: (ev: Event) => any;
onabort: (ev: UIEvent) => any;
onreadystatechange: (ev: Event) => any;
outerHeight: number;
onkeypress: (ev: KeyboardEvent) => any;
frameElement: Element;
onloadeddata: (ev: Event) => any;
onsuspend: (ev: Event) => any;
window: Window;
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
ontimeupdate: (ev: Event) => any;
onresize: (ev: UIEvent) => any;
onselect: (ev: UIEvent) => any;
navigator: Navigator;
styleMedia: StyleMedia;
ondrop: (ev: DragEvent) => any;
onmouseout: (ev: MouseEvent) => any;
onended: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onunload: (ev: Event) => any;
onscroll: (ev: UIEvent) => any;
screenY: number;
onmousewheel: (ev: MouseWheelEvent) => any;
onload: (ev: Event) => any;
onvolumechange: (ev: Event) => any;
oninput: (ev: Event) => any;
performance: Performance;
onmspointerdown: (ev: any) => any;
animationStartTime: number;
onmsgesturedoubletap: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmspointermove: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
msAnimationStartTime: number;
applicationCache: ApplicationCache;
onmsinertiastart: (ev: any) => any;
onmspointerover: (ev: any) => any;
onpopstate: (ev: PopStateEvent) => any;
onmspointerup: (ev: any) => any;
onpageshow: (ev: PageTransitionEvent) => any;
ondevicemotion: (ev: DeviceMotionEvent) => any;
devicePixelRatio: number;
msCrypto: Crypto;
ondeviceorientation: (ev: DeviceOrientationEvent) => any;
doNotTrack: string;
onmspointerenter: (ev: any) => any;
onpagehide: (ev: PageTransitionEvent) => any;
onmspointerleave: (ev: any) => any;
alert(message?: any): void;
scroll(x?: number, y?: number): void;
focus(): void;
scrollTo(x?: number, y?: number): void;
print(): void;
prompt(message?: string, _default?: string): string;
toString(): string;
open(url?: string, target?: string, features?: string, replace?: boolean): Window;
scrollBy(x?: number, y?: number): void;
confirm(message?: string): boolean;
close(): void;
postMessage(message: any, targetOrigin: string, ports?: any): void;
showModalDialog(url?: string, argument?: any, options?: any): any;
blur(): void;
getSelection(): Selection;
getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
msCancelRequestAnimationFrame(handle: number): void;
matchMedia(mediaQuery: string): MediaQueryList;
cancelAnimationFrame(handle: number): void;
msIsStaticHTML(html: string): boolean;
msMatchMedia(mediaQuery: string): MediaQueryList;
requestAnimationFrame(callback: FrameRequestCallback): number;
msRequestAnimationFrame(callback: FrameRequestCallback): number;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Window: {
prototype: Window;
new(): Window;
}
interface HTMLCollection extends MSHTMLCollectionExtensions {
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Retrieves an object from various collections.
*/
item(nameOrIndex?: any, optionalIndex?: any): Element;
/**
* Retrieves a select object or an object from an options collection.
*/
namedItem(name: string): Element;
// [name: string]: Element;
[index: number]: Element;
}
declare var HTMLCollection: {
prototype: HTMLCollection;
new(): HTMLCollection;
}
interface BlobPropertyBag {
type?: string;
endings?: string;
}
interface Blob {
type: string;
size: number;
msDetachStream(): any;
slice(start?: number, end?: number, contentType?: string): Blob;
msClose(): void;
}
declare var Blob: {
prototype: Blob;
new (blobParts?: any[], options?: BlobPropertyBag): Blob;
}
interface NavigatorID {
appVersion: string;
appName: string;
userAgent: string;
platform: string;
product: string;
vendor: string;
}
interface HTMLTableElement extends HTMLElement, MSDataBindingTableExtensions, MSDataBindingExtensions, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Sets or retrieves the amount of space between cells in a table.
*/
cellSpacing: string;
/**
* Retrieves the tFoot object of the table.
*/
tFoot: HTMLTableSectionElement;
/**
* Sets or retrieves the way the border frame around the table is displayed.
*/
frame: string;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: HTMLCollection;
/**
* Sets or retrieves which dividing lines (inner borders) are displayed.
*/
rules: string;
/**
* Sets or retrieves the number of columns in the table.
*/
cols: number;
/**
* Sets or retrieves a description and/or structure of the object.
*/
summary: string;
/**
* Retrieves the caption object of a table.
*/
caption: HTMLTableCaptionElement;
/**
* Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order.
*/
tBodies: HTMLCollection;
/**
* Retrieves the tHead object of the table.
*/
tHead: HTMLTableSectionElement;
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
/**
* Retrieves a collection of all cells in the table row or in the entire table.
*/
cells: HTMLCollection;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves the amount of space between the border of the cell and the content of the cell.
*/
cellPadding: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
border: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
/**
* Removes the specified row (tr) from the element and from the rows collection.
* @param index Number that specifies the zero-based position in the rows collection of the row to remove.
*/
deleteRow(index?: number): void;
/**
* Creates an empty tBody element in the table.
*/
createTBody(): HTMLElement;
/**
* Deletes the caption element and its contents from the table.
*/
deleteCaption(): void;
/**
* Creates a new row (tr) in the table, and adds the row to the rows collection.
* @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
*/
insertRow(index?: number): HTMLElement;
/**
* Deletes the tFoot element and its contents from the table.
*/
deleteTFoot(): void;
/**
* Returns the tHead element object if successful, or null otherwise.
*/
createTHead(): HTMLElement;
/**
* Deletes the tHead element and its contents from the table.
*/
deleteTHead(): void;
/**
* Creates an empty caption element in the table.
*/
createCaption(): HTMLElement;
/**
* Moves a table row to a new position.
* @param indexFrom Number that specifies the index in the rows collection of the table row that is moved.
* @param indexTo Number that specifies where the row is moved within the rows collection.
*/
moveRow(indexFrom?: number, indexTo?: number): any;
/**
* Creates an empty tFoot element in the table.
*/
createTFoot(): HTMLElement;
}
declare var HTMLTableElement: {
prototype: HTMLTableElement;
new(): HTMLTableElement;
}
interface TreeWalker {
whatToShow: number;
filter: NodeFilter;
root: Node;
currentNode: Node;
expandEntityReferences: boolean;
previousSibling(): Node;
lastChild(): Node;
nextSibling(): Node;
nextNode(): Node;
parentNode(): Node;
firstChild(): Node;
previousNode(): Node;
}
declare var TreeWalker: {
prototype: TreeWalker;
new(): TreeWalker;
}
interface GetSVGDocument {
getSVGDocument(): Document;
}
interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
y: number;
y1: number;
x: number;
x1: number;
}
declare var SVGPathSegCurvetoQuadraticRel: {
prototype: SVGPathSegCurvetoQuadraticRel;
new(): SVGPathSegCurvetoQuadraticRel;
}
interface Performance {
navigation: PerformanceNavigation;
timing: PerformanceTiming;
getEntriesByType(entryType: string): any;
toJSON(): any;
getMeasures(measureName?: string): any;
clearMarks(markName?: string): void;
getMarks(markName?: string): any;
clearResourceTimings(): void;
mark(markName: string): void;
measure(measureName: string, startMarkName?: string, endMarkName?: string): void;
getEntriesByName(name: string, entryType?: string): any;
getEntries(): any;
clearMeasures(measureName?: string): void;
setResourceTimingBufferSize(maxSize: number): void;
now(): number;
}
declare var Performance: {
prototype: Performance;
new(): Performance;
}
interface MSDataBindingTableExtensions {
dataPageSize: number;
nextPage(): void;
firstPage(): void;
refresh(): void;
previousPage(): void;
lastPage(): void;
}
interface CompositionEvent extends UIEvent {
data: string;
locale: string;
initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void;
}
declare var CompositionEvent: {
prototype: CompositionEvent;
new(): CompositionEvent;
}
interface WindowTimers extends WindowTimersExtension {
clearTimeout(handle: number): void;
setTimeout(handler: any, timeout?: any, ...args: any[]): number;
clearInterval(handle: number): void;
setInterval(handler: any, timeout?: any, ...args: any[]): number;
}
interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired {
orientType: SVGAnimatedEnumeration;
markerUnits: SVGAnimatedEnumeration;
markerWidth: SVGAnimatedLength;
markerHeight: SVGAnimatedLength;
orientAngle: SVGAnimatedAngle;
refY: SVGAnimatedLength;
refX: SVGAnimatedLength;
setOrientToAngle(angle: SVGAngle): void;
setOrientToAuto(): void;
SVG_MARKER_ORIENT_UNKNOWN: number;
SVG_MARKER_ORIENT_ANGLE: number;
SVG_MARKERUNITS_UNKNOWN: number;
SVG_MARKERUNITS_STROKEWIDTH: number;
SVG_MARKER_ORIENT_AUTO: number;
SVG_MARKERUNITS_USERSPACEONUSE: number;
}
declare var SVGMarkerElement: {
prototype: SVGMarkerElement;
new(): SVGMarkerElement;
SVG_MARKER_ORIENT_UNKNOWN: number;
SVG_MARKER_ORIENT_ANGLE: number;
SVG_MARKERUNITS_UNKNOWN: number;
SVG_MARKERUNITS_STROKEWIDTH: number;
SVG_MARKER_ORIENT_AUTO: number;
SVG_MARKERUNITS_USERSPACEONUSE: number;
}
interface CSSStyleDeclaration {
backgroundAttachment: string;
visibility: string;
textAlignLast: string;
borderRightStyle: string;
counterIncrement: string;
orphans: string;
cssText: string;
borderStyle: string;
pointerEvents: string;
borderTopColor: string;
markerEnd: string;
textIndent: string;
listStyleImage: string;
cursor: string;
listStylePosition: string;
wordWrap: string;
borderTopStyle: string;
alignmentBaseline: string;
opacity: string;
direction: string;
strokeMiterlimit: string;
maxWidth: string;
color: string;
clip: string;
borderRightWidth: string;
verticalAlign: string;
overflow: string;
mask: string;
borderLeftStyle: string;
emptyCells: string;
stopOpacity: string;
paddingRight: string;
parentRule: CSSRule;
background: string;
boxSizing: string;
textJustify: string;
height: string;
paddingTop: string;
length: number;
right: string;
baselineShift: string;
borderLeft: string;
widows: string;
lineHeight: string;
left: string;
textUnderlinePosition: string;
glyphOrientationHorizontal: string;
display: string;
textAnchor: string;
cssFloat: string;
strokeDasharray: string;
rubyAlign: string;
fontSizeAdjust: string;
borderLeftColor: string;
backgroundImage: string;
listStyleType: string;
strokeWidth: string;
textOverflow: string;
fillRule: string;
borderBottomColor: string;
zIndex: string;
position: string;
listStyle: string;
msTransformOrigin: string;
dominantBaseline: string;
overflowY: string;
fill: string;
captionSide: string;
borderCollapse: string;
boxShadow: string;
quotes: string;
tableLayout: string;
unicodeBidi: string;
borderBottomWidth: string;
backgroundSize: string;
textDecoration: string;
strokeDashoffset: string;
fontSize: string;
border: string;
pageBreakBefore: string;
borderTopRightRadius: string;
msTransform: string;
borderBottomLeftRadius: string;
textTransform: string;
rubyPosition: string;
strokeLinejoin: string;
clipPath: string;
borderRightColor: string;
fontFamily: string;
clear: string;
content: string;
backgroundClip: string;
marginBottom: string;
counterReset: string;
outlineWidth: string;
marginRight: string;
paddingLeft: string;
borderBottom: string;
wordBreak: string;
marginTop: string;
top: string;
fontWeight: string;
borderRight: string;
width: string;
kerning: string;
pageBreakAfter: string;
borderBottomStyle: string;
fontStretch: string;
padding: string;
strokeOpacity: string;
markerStart: string;
bottom: string;
borderLeftWidth: string;
clipRule: string;
backgroundPosition: string;
backgroundColor: string;
pageBreakInside: string;
backgroundOrigin: string;
strokeLinecap: string;
borderTopWidth: string;
outlineStyle: string;
borderTop: string;
outlineColor: string;
paddingBottom: string;
marginLeft: string;
font: string;
outline: string;
wordSpacing: string;
maxHeight: string;
fillOpacity: string;
letterSpacing: string;
borderSpacing: string;
backgroundRepeat: string;
borderRadius: string;
borderWidth: string;
borderBottomRightRadius: string;
whiteSpace: string;
fontStyle: string;
minWidth: string;
stopColor: string;
borderTopLeftRadius: string;
borderColor: string;
marker: string;
glyphOrientationVertical: string;
markerMid: string;
fontVariant: string;
minHeight: string;
stroke: string;
rubyOverhang: string;
overflowX: string;
textAlign: string;
margin: string;
animationFillMode: string;
floodColor: string;
animationIterationCount: string;
textShadow: string;
backfaceVisibility: string;
msAnimationIterationCount: string;
animationDelay: string;
animationTimingFunction: string;
columnWidth: any;
msScrollSnapX: string;
columnRuleColor: any;
columnRuleWidth: any;
transitionDelay: string;
transition: string;
msFlowFrom: string;
msScrollSnapType: string;
msContentZoomSnapType: string;
msGridColumns: string;
msAnimationName: string;
msGridRowAlign: string;
msContentZoomChaining: string;
msGridColumn: any;
msHyphenateLimitZone: any;
msScrollRails: string;
msAnimationDelay: string;
enableBackground: string;
msWrapThrough: string;
columnRuleStyle: string;
msAnimation: string;
msFlexFlow: string;
msScrollSnapY: string;
msHyphenateLimitLines: any;
msTouchAction: string;
msScrollLimit: string;
animation: string;
transform: string;
filter: string;
colorInterpolationFilters: string;
transitionTimingFunction: string;
msBackfaceVisibility: string;
animationPlayState: string;
transformOrigin: string;
msScrollLimitYMin: any;
msFontFeatureSettings: string;
msContentZoomLimitMin: any;
columnGap: any;
transitionProperty: string;
msAnimationDuration: string;
msAnimationFillMode: string;
msFlexDirection: string;
msTransitionDuration: string;
fontFeatureSettings: string;
breakBefore: string;
msFlexWrap: string;
perspective: string;
msFlowInto: string;
msTransformStyle: string;
msScrollTranslation: string;
msTransitionProperty: string;
msUserSelect: string;
msOverflowStyle: string;
msScrollSnapPointsY: string;
animationDirection: string;
animationDuration: string;
msFlex: string;
msTransitionTimingFunction: string;
animationName: string;
columnRule: string;
msGridColumnSpan: any;
msFlexNegative: string;
columnFill: string;
msGridRow: any;
msFlexOrder: string;
msFlexItemAlign: string;
msFlexPositive: string;
msContentZoomLimitMax: any;
msScrollLimitYMax: any;
msGridColumnAlign: string;
perspectiveOrigin: string;
lightingColor: string;
columns: string;
msScrollChaining: string;
msHyphenateLimitChars: string;
msTouchSelect: string;
floodOpacity: string;
msAnimationDirection: string;
msAnimationPlayState: string;
columnSpan: string;
msContentZooming: string;
msPerspective: string;
msFlexPack: string;
msScrollSnapPointsX: string;
msContentZoomSnapPoints: string;
msGridRowSpan: any;
msContentZoomSnap: string;
msScrollLimitXMin: any;
breakInside: string;
msHighContrastAdjust: string;
msFlexLinePack: string;
msGridRows: string;
transitionDuration: string;
msHyphens: string;
breakAfter: string;
msTransition: string;
msPerspectiveOrigin: string;
msContentZoomLimit: string;
msScrollLimitXMax: any;
msFlexAlign: string;
msWrapMargin: any;
columnCount: any;
msAnimationTimingFunction: string;
msTransitionDelay: string;
transformStyle: string;
msWrapFlow: string;
msFlexPreferredSize: string;
alignItems: string;
borderImageSource: string;
flexBasis: string;
borderImageWidth: string;
borderImageRepeat: string;
order: string;
flex: string;
alignContent: string;
msImeAlign: string;
flexShrink: string;
flexGrow: string;
borderImageSlice: string;
flexWrap: string;
borderImageOutset: string;
flexDirection: string;
touchAction: string;
flexFlow: string;
borderImage: string;
justifyContent: string;
alignSelf: string;
msTextCombineHorizontal: string;
getPropertyPriority(propertyName: string): string;
getPropertyValue(propertyName: string): string;
removeProperty(propertyName: string): string;
item(index: number): string;
[index: number]: string;
setProperty(propertyName: string, value: string, priority?: string): void;
}
declare var CSSStyleDeclaration: {
prototype: CSSStyleDeclaration;
new(): CSSStyleDeclaration;
}
interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGGElement: {
prototype: SVGGElement;
new(): SVGGElement;
}
interface MSStyleCSSProperties extends MSCSSProperties {
pixelWidth: number;
posHeight: number;
posLeft: number;
pixelTop: number;
pixelBottom: number;
textDecorationNone: boolean;
pixelLeft: number;
posTop: number;
posBottom: number;
textDecorationOverline: boolean;
posWidth: number;
textDecorationLineThrough: boolean;
pixelHeight: number;
textDecorationBlink: boolean;
posRight: number;
pixelRight: number;
textDecorationUnderline: boolean;
}
declare var MSStyleCSSProperties: {
prototype: MSStyleCSSProperties;
new(): MSStyleCSSProperties;
}
interface Navigator extends NavigatorID, NavigatorOnLine, NavigatorContentUtils, MSNavigatorExtensions, NavigatorGeolocation, MSNavigatorDoNotTrack, NavigatorStorageUtils, MSFileSaver {
msMaxTouchPoints: number;
msPointerEnabled: boolean;
msManipulationViewsEnabled: boolean;
pointerEnabled: boolean;
maxTouchPoints: number;
msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
}
declare var Navigator: {
prototype: Navigator;
new(): Navigator;
}
interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
y: number;
x2: number;
x: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicSmoothAbs: {
prototype: SVGPathSegCurvetoCubicSmoothAbs;
new(): SVGPathSegCurvetoCubicSmoothAbs;
}
interface SVGZoomEvent extends UIEvent {
zoomRectScreen: SVGRect;
previousScale: number;
newScale: number;
previousTranslate: SVGPoint;
newTranslate: SVGPoint;
}
declare var SVGZoomEvent: {
prototype: SVGZoomEvent;
new(): SVGZoomEvent;
}
interface NodeSelector {
querySelectorAll(selectors: string): NodeList;
querySelector(selectors: string): Element;
}
interface HTMLTableDataCellElement extends HTMLTableCellElement {
}
declare var HTMLTableDataCellElement: {
prototype: HTMLTableDataCellElement;
new(): HTMLTableDataCellElement;
}
interface HTMLBaseElement extends HTMLElement {
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Gets or sets the baseline URL on which relative links are based.
*/
href: string;
}
declare var HTMLBaseElement: {
prototype: HTMLBaseElement;
new(): HTMLBaseElement;
}
interface ClientRect {
left: number;
width: number;
right: number;
top: number;
bottom: number;
height: number;
}
declare var ClientRect: {
prototype: ClientRect;
new(): ClientRect;
}
interface PositionErrorCallback {
(error: PositionError): void;
}
interface DOMImplementation {
createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;
createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document;
hasFeature(feature: string, version?: string): boolean;
createHTMLDocument(title: string): Document;
}
declare var DOMImplementation: {
prototype: DOMImplementation;
new(): DOMImplementation;
}
interface SVGUnitTypes {
SVG_UNIT_TYPE_UNKNOWN: number;
SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number;
SVG_UNIT_TYPE_USERSPACEONUSE: number;
}
declare var SVGUnitTypes: SVGUnitTypes;
interface Element extends Node, NodeSelector, ElementTraversal, GlobalEventHandlers {
scrollTop: number;
clientLeft: number;
scrollLeft: number;
tagName: string;
clientWidth: number;
scrollWidth: number;
clientHeight: number;
clientTop: number;
scrollHeight: number;
msRegionOverflow: string;
onmspointerdown: (ev: any) => any;
onmsgotpointercapture: (ev: any) => any;
onmsgesturedoubletap: (ev: any) => any;
onmspointerhover: (ev: any) => any;
onmsgesturehold: (ev: any) => any;
onmspointermove: (ev: any) => any;
onmsgesturechange: (ev: any) => any;
onmsgesturestart: (ev: any) => any;
onmspointercancel: (ev: any) => any;
onmsgestureend: (ev: any) => any;
onmsgesturetap: (ev: any) => any;
onmspointerout: (ev: any) => any;
onmsinertiastart: (ev: any) => any;
onmslostpointercapture: (ev: any) => any;
onmspointerover: (ev: any) => any;
msContentZoomFactor: number;
onmspointerup: (ev: any) => any;
onlostpointercapture: (ev: PointerEvent) => any;
onmspointerenter: (ev: any) => any;
ongotpointercapture: (ev: PointerEvent) => any;
onmspointerleave: (ev: any) => any;
getAttribute(name?: string): string;
getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
hasAttributeNS(namespaceURI: string, localName: string): boolean;
getBoundingClientRect(): ClientRect;
getAttributeNS(namespaceURI: string, localName: string): string;
getAttributeNodeNS(namespaceURI: string, localName: string): Attr;
setAttributeNodeNS(newAttr: Attr): Attr;
msMatchesSelector(selectors: string): boolean;
hasAttribute(name: string): boolean;
removeAttribute(name?: string): void;
setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void;
getAttributeNode(name: string): Attr;
fireEvent(eventName: string, eventObj?: any): boolean;
getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "bgsound"): NodeListOf<HTMLBGSoundElement>;
getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "SOURCE"): NodeListOf<HTMLSourceElement>;
getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
getElementsByTagName(name: string): NodeList;
getClientRects(): ClientRectList;
setAttributeNode(newAttr: Attr): Attr;
removeAttributeNode(oldAttr: Attr): Attr;
setAttribute(name?: string, value?: string): void;
removeAttributeNS(namespaceURI: string, localName: string): void;
msGetRegionContent(): MSRangeCollection;
msReleasePointerCapture(pointerId: number): void;
msSetPointerCapture(pointerId: number): void;
msZoomTo(args: MsZoomToOptions): void;
setPointerCapture(pointerId: number): void;
msGetUntransformedBounds(): ClientRect;
releasePointerCapture(pointerId: number): void;
msRequestFullscreen(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Element: {
prototype: Element;
new(): Element;
}
interface HTMLNextIdElement extends HTMLElement {
n: string;
}
declare var HTMLNextIdElement: {
prototype: HTMLNextIdElement;
new(): HTMLNextIdElement;
}
interface SVGPathSegMovetoRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegMovetoRel: {
prototype: SVGPathSegMovetoRel;
new(): SVGPathSegMovetoRel;
}
interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y1: SVGAnimatedLength;
x2: SVGAnimatedLength;
x1: SVGAnimatedLength;
y2: SVGAnimatedLength;
}
declare var SVGLineElement: {
prototype: SVGLineElement;
new(): SVGLineElement;
}
interface HTMLParagraphElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
}
declare var HTMLParagraphElement: {
prototype: HTMLParagraphElement;
new(): HTMLParagraphElement;
}
interface HTMLAreasCollection extends HTMLCollection {
/**
* Removes an element from the collection.
*/
remove(index?: number): void;
/**
* Adds an element to the areas, controlRange, or options collection.
*/
add(element: HTMLElement, before?: any): void;
}
declare var HTMLAreasCollection: {
prototype: HTMLAreasCollection;
new(): HTMLAreasCollection;
}
interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace {
}
declare var SVGDescElement: {
prototype: SVGDescElement;
new(): SVGDescElement;
}
interface Node extends EventTarget {
nodeType: number;
previousSibling: Node;
localName: string;
namespaceURI: string;
textContent: string;
parentNode: Node;
nextSibling: Node;
nodeValue: string;
lastChild: Node;
childNodes: NodeList;
nodeName: string;
ownerDocument: Document;
attributes: NamedNodeMap;
firstChild: Node;
prefix: string;
removeChild(oldChild: Node): Node;
appendChild(newChild: Node): Node;
isSupported(feature: string, version: string): boolean;
isEqualNode(arg: Node): boolean;
lookupPrefix(namespaceURI: string): string;
isDefaultNamespace(namespaceURI: string): boolean;
compareDocumentPosition(other: Node): number;
normalize(): void;
isSameNode(other: Node): boolean;
hasAttributes(): boolean;
lookupNamespaceURI(prefix: string): string;
cloneNode(deep?: boolean): Node;
hasChildNodes(): boolean;
replaceChild(newChild: Node, oldChild: Node): Node;
insertBefore(newChild: Node, refChild?: Node): Node;
ENTITY_REFERENCE_NODE: number;
ATTRIBUTE_NODE: number;
DOCUMENT_FRAGMENT_NODE: number;
TEXT_NODE: number;
ELEMENT_NODE: number;
COMMENT_NODE: number;
DOCUMENT_POSITION_DISCONNECTED: number;
DOCUMENT_POSITION_CONTAINED_BY: number;
DOCUMENT_POSITION_CONTAINS: number;
DOCUMENT_TYPE_NODE: number;
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
DOCUMENT_NODE: number;
ENTITY_NODE: number;
PROCESSING_INSTRUCTION_NODE: number;
CDATA_SECTION_NODE: number;
NOTATION_NODE: number;
DOCUMENT_POSITION_FOLLOWING: number;
DOCUMENT_POSITION_PRECEDING: number;
}
declare var Node: {
prototype: Node;
new(): Node;
ENTITY_REFERENCE_NODE: number;
ATTRIBUTE_NODE: number;
DOCUMENT_FRAGMENT_NODE: number;
TEXT_NODE: number;
ELEMENT_NODE: number;
COMMENT_NODE: number;
DOCUMENT_POSITION_DISCONNECTED: number;
DOCUMENT_POSITION_CONTAINED_BY: number;
DOCUMENT_POSITION_CONTAINS: number;
DOCUMENT_TYPE_NODE: number;
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
DOCUMENT_NODE: number;
ENTITY_NODE: number;
PROCESSING_INSTRUCTION_NODE: number;
CDATA_SECTION_NODE: number;
NOTATION_NODE: number;
DOCUMENT_POSITION_FOLLOWING: number;
DOCUMENT_POSITION_PRECEDING: number;
}
interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegCurvetoQuadraticSmoothRel: {
prototype: SVGPathSegCurvetoQuadraticSmoothRel;
new(): SVGPathSegCurvetoQuadraticSmoothRel;
}
interface DOML2DeprecatedListSpaceReduction {
compact: boolean;
}
interface MSScriptHost {
}
declare var MSScriptHost: {
prototype: MSScriptHost;
new(): MSScriptHost;
}
interface SVGClipPathElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
clipPathUnits: SVGAnimatedEnumeration;
}
declare var SVGClipPathElement: {
prototype: SVGClipPathElement;
new(): SVGClipPathElement;
}
interface MouseEvent extends UIEvent {
toElement: Element;
layerY: number;
fromElement: Element;
which: number;
pageX: number;
offsetY: number;
x: number;
y: number;
metaKey: boolean;
altKey: boolean;
ctrlKey: boolean;
offsetX: number;
screenX: number;
clientY: number;
shiftKey: boolean;
layerX: number;
screenY: number;
relatedTarget: EventTarget;
button: number;
pageY: number;
buttons: number;
clientX: number;
initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void;
getModifierState(keyArg: string): boolean;
}
declare var MouseEvent: {
prototype: MouseEvent;
new(): MouseEvent;
}
interface RangeException {
code: number;
message: string;
name: string;
toString(): string;
INVALID_NODE_TYPE_ERR: number;
BAD_BOUNDARYPOINTS_ERR: number;
}
declare var RangeException: {
prototype: RangeException;
new(): RangeException;
INVALID_NODE_TYPE_ERR: number;
BAD_BOUNDARYPOINTS_ERR: number;
}
interface SVGTextPositioningElement extends SVGTextContentElement {
y: SVGAnimatedLengthList;
rotate: SVGAnimatedNumberList;
dy: SVGAnimatedLengthList;
x: SVGAnimatedLengthList;
dx: SVGAnimatedLengthList;
}
declare var SVGTextPositioningElement: {
prototype: SVGTextPositioningElement;
new(): SVGTextPositioningElement;
}
interface HTMLAppletElement extends HTMLElement, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions {
width: number;
/**
* Sets or retrieves the Internet media type for the code associated with the object.
*/
codeType: string;
object: string;
form: HTMLFormElement;
code: string;
/**
* Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
*/
archive: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves a message to be displayed while an object is loading.
*/
standby: string;
/**
* Sets or retrieves the class identifier for the object.
*/
classid: string;
/**
* Sets or retrieves the shape of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the URL that references the data of the object.
*/
data: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Gets or sets the optional alternative HTML script to execute if the object fails to load.
*/
altHtml: string;
/**
* Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned.
*/
contentDocument: Document;
/**
* Sets or retrieves the URL of the component.
*/
codeBase: string;
/**
* Sets or retrieves a character string that can be used to implement your own declare functionality for the object.
*/
declare: boolean;
/**
* Returns the content type of the object.
*/
type: string;
/**
* Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
*/
BaseHref: string;
}
declare var HTMLAppletElement: {
prototype: HTMLAppletElement;
new(): HTMLAppletElement;
}
interface TextMetrics {
width: number;
}
declare var TextMetrics: {
prototype: TextMetrics;
new(): TextMetrics;
}
interface DocumentEvent {
createEvent(eventInterface: "AnimationEvent"): AnimationEvent;
createEvent(eventInterface: "CloseEvent"): CloseEvent;
createEvent(eventInterface: "CompositionEvent"): CompositionEvent;
createEvent(eventInterface: "CustomEvent"): CustomEvent;
createEvent(eventInterface: "DeviceMotionEvent"): DeviceMotionEvent;
createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent;
createEvent(eventInterface: "DragEvent"): DragEvent;
createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
createEvent(eventInterface: "Event"): Event;
createEvent(eventInterface: "Events"): Event;
createEvent(eventInterface: "FocusEvent"): FocusEvent;
createEvent(eventInterface: "HTMLEvents"): Event;
createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent;
createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent;
createEvent(eventInterface: "LongRunningScriptDetectedEvent"): LongRunningScriptDetectedEvent;
createEvent(eventInterface: "MessageEvent"): MessageEvent;
createEvent(eventInterface: "MouseEvent"): MouseEvent;
createEvent(eventInterface: "MouseEvents"): MouseEvent;
createEvent(eventInterface: "MouseWheelEvent"): MouseWheelEvent;
createEvent(eventInterface: "MSGestureEvent"): MSGestureEvent;
createEvent(eventInterface: "MSPointerEvent"): MSPointerEvent;
createEvent(eventInterface: "MutationEvent"): MutationEvent;
createEvent(eventInterface: "MutationEvents"): MutationEvent;
createEvent(eventInterface: "NavigationCompletedEvent"): NavigationCompletedEvent;
createEvent(eventInterface: "NavigationEvent"): NavigationEvent;
createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent;
createEvent(eventInterface: "PointerEvent"): MSPointerEvent;
createEvent(eventInterface: "PopStateEvent"): PopStateEvent;
createEvent(eventInterface: "ProgressEvent"): ProgressEvent;
createEvent(eventInterface: "StorageEvent"): StorageEvent;
createEvent(eventInterface: "SVGZoomEvents"): SVGZoomEvent;
createEvent(eventInterface: "TextEvent"): TextEvent;
createEvent(eventInterface: "TrackEvent"): TrackEvent;
createEvent(eventInterface: "TransitionEvent"): TransitionEvent;
createEvent(eventInterface: "UIEvent"): UIEvent;
createEvent(eventInterface: "UIEvents"): UIEvent;
createEvent(eventInterface: "UnviewableContentIdentifiedEvent"): UnviewableContentIdentifiedEvent;
createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent;
createEvent(eventInterface: "WheelEvent"): WheelEvent;
createEvent(eventInterface: string): Event;
}
interface HTMLOListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
/**
* The starting number.
*/
start: number;
}
declare var HTMLOListElement: {
prototype: HTMLOListElement;
new(): HTMLOListElement;
}
interface SVGPathSegLinetoVerticalRel extends SVGPathSeg {
y: number;
}
declare var SVGPathSegLinetoVerticalRel: {
prototype: SVGPathSegLinetoVerticalRel;
new(): SVGPathSegLinetoVerticalRel;
}
interface SVGAnimatedString {
animVal: string;
baseVal: string;
}
declare var SVGAnimatedString: {
prototype: SVGAnimatedString;
new(): SVGAnimatedString;
}
interface CDATASection extends Text {
}
declare var CDATASection: {
prototype: CDATASection;
new(): CDATASection;
}
interface StyleMedia {
type: string;
matchMedium(mediaquery: string): boolean;
}
declare var StyleMedia: {
prototype: StyleMedia;
new(): StyleMedia;
}
interface HTMLSelectElement extends HTMLElement, MSHTMLCollectionExtensions, MSDataBindingExtensions {
options: HTMLSelectElement;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the number of rows in the list box.
*/
size: number;
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Sets or retrieves the index of the selected option in a select object.
*/
selectedIndex: number;
/**
* Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
*/
multiple: boolean;
/**
* Retrieves the type of select control based on the value of the MULTIPLE attribute.
*/
type: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Removes an element from the collection.
* @param index Number that specifies the zero-based index of the element to remove from the collection.
*/
remove(index?: number): void;
/**
* Adds an element to the areas, controlRange, or options collection.
* @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection.
* @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection.
*/
add(element: HTMLElement, before?: any): void;
/**
* Retrieves a select object or an object from an options collection.
* @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
* @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
*/
item(name?: any, index?: any): any;
/**
* Retrieves a select object or an object from an options collection.
* @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.
*/
namedItem(name: string): any;
[name: string]: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLSelectElement: {
prototype: HTMLSelectElement;
new(): HTMLSelectElement;
}
interface TextRange {
boundingLeft: number;
htmlText: string;
offsetLeft: number;
boundingWidth: number;
boundingHeight: number;
boundingTop: number;
text: string;
offsetTop: number;
moveToPoint(x: number, y: number): void;
queryCommandValue(cmdID: string): any;
getBookmark(): string;
move(unit: string, count?: number): number;
queryCommandIndeterm(cmdID: string): boolean;
scrollIntoView(fStart?: boolean): void;
findText(string: string, count?: number, flags?: number): boolean;
execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
getBoundingClientRect(): ClientRect;
moveToBookmark(bookmark: string): boolean;
isEqual(range: TextRange): boolean;
duplicate(): TextRange;
collapse(start?: boolean): void;
queryCommandText(cmdID: string): string;
select(): void;
pasteHTML(html: string): void;
inRange(range: TextRange): boolean;
moveEnd(unit: string, count?: number): number;
getClientRects(): ClientRectList;
moveStart(unit: string, count?: number): number;
parentElement(): Element;
queryCommandState(cmdID: string): boolean;
compareEndPoints(how: string, sourceRange: TextRange): number;
execCommandShowHelp(cmdID: string): boolean;
moveToElementText(element: Element): void;
expand(Unit: string): boolean;
queryCommandSupported(cmdID: string): boolean;
setEndPoint(how: string, SourceRange: TextRange): void;
queryCommandEnabled(cmdID: string): boolean;
}
declare var TextRange: {
prototype: TextRange;
new(): TextRange;
}
interface SVGTests {
requiredFeatures: SVGStringList;
requiredExtensions: SVGStringList;
systemLanguage: SVGStringList;
hasExtension(extension: string): boolean;
}
interface HTMLBlockElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLBlockElement: {
prototype: HTMLBlockElement;
new(): HTMLBlockElement;
}
interface CSSStyleSheet extends StyleSheet {
owningElement: Element;
imports: StyleSheetList;
isAlternate: boolean;
rules: MSCSSRuleList;
isPrefAlternate: boolean;
readOnly: boolean;
cssText: string;
ownerRule: CSSRule;
href: string;
cssRules: CSSRuleList;
id: string;
pages: StyleSheetPageList;
addImport(bstrURL: string, lIndex?: number): number;
addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number;
insertRule(rule: string, index?: number): number;
removeRule(lIndex: number): void;
deleteRule(index?: number): void;
addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number;
removeImport(lIndex: number): void;
}
declare var CSSStyleSheet: {
prototype: CSSStyleSheet;
new(): CSSStyleSheet;
}
interface MSSelection {
type: string;
typeDetail: string;
createRange(): TextRange;
clear(): void;
createRangeCollection(): TextRangeCollection;
empty(): void;
}
declare var MSSelection: {
prototype: MSSelection;
new(): MSSelection;
}
interface HTMLMetaElement extends HTMLElement {
/**
* Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header.
*/
httpEquiv: string;
/**
* Sets or retrieves the value specified in the content attribute of the meta object.
*/
name: string;
/**
* Gets or sets meta-information to associate with httpEquiv or name.
*/
content: string;
/**
* Sets or retrieves the URL property that will be loaded after the specified time has elapsed.
*/
url: string;
/**
* Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.
*/
scheme: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
}
declare var HTMLMetaElement: {
prototype: HTMLMetaElement;
new(): HTMLMetaElement;
}
interface SVGPatternElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired, SVGURIReference {
patternUnits: SVGAnimatedEnumeration;
y: SVGAnimatedLength;
width: SVGAnimatedLength;
x: SVGAnimatedLength;
patternContentUnits: SVGAnimatedEnumeration;
patternTransform: SVGAnimatedTransformList;
height: SVGAnimatedLength;
}
declare var SVGPatternElement: {
prototype: SVGPatternElement;
new(): SVGPatternElement;
}
interface SVGAnimatedAngle {
animVal: SVGAngle;
baseVal: SVGAngle;
}
declare var SVGAnimatedAngle: {
prototype: SVGAnimatedAngle;
new(): SVGAnimatedAngle;
}
interface Selection {
isCollapsed: boolean;
anchorNode: Node;
focusNode: Node;
anchorOffset: number;
focusOffset: number;
rangeCount: number;
addRange(range: Range): void;
collapseToEnd(): void;
toString(): string;
selectAllChildren(parentNode: Node): void;
getRangeAt(index: number): Range;
collapse(parentNode: Node, offset: number): void;
removeAllRanges(): void;
collapseToStart(): void;
deleteFromDocument(): void;
removeRange(range: Range): void;
}
declare var Selection: {
prototype: Selection;
new(): Selection;
}
interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference {
type: string;
}
declare var SVGScriptElement: {
prototype: SVGScriptElement;
new(): SVGScriptElement;
}
interface HTMLDDElement extends HTMLElement {
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDDElement: {
prototype: HTMLDDElement;
new(): HTMLDDElement;
}
interface MSDataBindingRecordSetReadonlyExtensions {
recordset: any;
namedRecordset(dataMember: string, hierarchy?: any): any;
}
interface CSSStyleRule extends CSSRule {
selectorText: string;
style: MSStyleCSSProperties;
readOnly: boolean;
}
declare var CSSStyleRule: {
prototype: CSSStyleRule;
new(): CSSStyleRule;
}
interface NodeIterator {
whatToShow: number;
filter: NodeFilter;
root: Node;
expandEntityReferences: boolean;
nextNode(): Node;
detach(): void;
previousNode(): Node;
}
declare var NodeIterator: {
prototype: NodeIterator;
new(): NodeIterator;
}
interface SVGViewElement extends SVGElement, SVGZoomAndPan, SVGFitToViewBox, SVGExternalResourcesRequired {
viewTarget: SVGStringList;
}
declare var SVGViewElement: {
prototype: SVGViewElement;
new(): SVGViewElement;
}
interface HTMLLinkElement extends HTMLElement, LinkStyle {
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rel: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or retrieves the media type.
*/
media: string;
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rev: string;
/**
* Sets or retrieves the MIME type of the object.
*/
type: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the language code of the object.
*/
hreflang: string;
}
declare var HTMLLinkElement: {
prototype: HTMLLinkElement;
new(): HTMLLinkElement;
}
interface SVGLocatable {
farthestViewportElement: SVGElement;
nearestViewportElement: SVGElement;
getBBox(): SVGRect;
getTransformToElement(element: SVGElement): SVGMatrix;
getCTM(): SVGMatrix;
getScreenCTM(): SVGMatrix;
}
interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
/**
* Sets or retrieves the current typeface family.
*/
face: string;
}
declare var HTMLFontElement: {
prototype: HTMLFontElement;
new(): HTMLFontElement;
}
interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace {
}
declare var SVGTitleElement: {
prototype: SVGTitleElement;
new(): SVGTitleElement;
}
interface ControlRangeCollection {
length: number;
queryCommandValue(cmdID: string): any;
remove(index: number): void;
add(item: Element): void;
queryCommandIndeterm(cmdID: string): boolean;
scrollIntoView(varargStart?: any): void;
item(index: number): Element;
[index: number]: Element;
execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
addElement(item: Element): void;
queryCommandState(cmdID: string): boolean;
queryCommandSupported(cmdID: string): boolean;
queryCommandEnabled(cmdID: string): boolean;
queryCommandText(cmdID: string): string;
select(): void;
}
declare var ControlRangeCollection: {
prototype: ControlRangeCollection;
new(): ControlRangeCollection;
}
interface MSNamespaceInfo extends MSEventAttachmentTarget {
urn: string;
onreadystatechange: (ev: Event) => any;
name: string;
readyState: string;
doImport(implementationUrl: string): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSNamespaceInfo: {
prototype: MSNamespaceInfo;
new(): MSNamespaceInfo;
}
interface WindowSessionStorage {
sessionStorage: Storage;
}
interface SVGAnimatedTransformList {
animVal: SVGTransformList;
baseVal: SVGTransformList;
}
declare var SVGAnimatedTransformList: {
prototype: SVGAnimatedTransformList;
new(): SVGAnimatedTransformList;
}
interface HTMLTableCaptionElement extends HTMLElement {
/**
* Sets or retrieves the alignment of the caption or legend.
*/
align: string;
/**
* Sets or retrieves whether the caption appears at the top or bottom of the table.
*/
vAlign: string;
}
declare var HTMLTableCaptionElement: {
prototype: HTMLTableCaptionElement;
new(): HTMLTableCaptionElement;
}
interface HTMLOptionElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the ordinal position of an option in a list box.
*/
index: number;
/**
* Sets or retrieves the status of an option.
*/
defaultSelected: boolean;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Sets or retrieves the text string specified by the option tag.
*/
text: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves a value that you can use to implement your own label functionality for the object.
*/
label: string;
/**
* Sets or retrieves whether the option in the list box is the default item.
*/
selected: boolean;
}
declare var HTMLOptionElement: {
prototype: HTMLOptionElement;
new(): HTMLOptionElement;
create(): HTMLOptionElement;
}
interface HTMLMapElement extends HTMLElement {
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Retrieves a collection of the area objects defined for the given map object.
*/
areas: HTMLAreasCollection;
}
declare var HTMLMapElement: {
prototype: HTMLMapElement;
new(): HTMLMapElement;
}
interface HTMLMenuElement extends HTMLElement, DOML2DeprecatedListSpaceReduction {
type: string;
}
declare var HTMLMenuElement: {
prototype: HTMLMenuElement;
new(): HTMLMenuElement;
}
interface MouseWheelEvent extends MouseEvent {
wheelDelta: number;
initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void;
}
declare var MouseWheelEvent: {
prototype: MouseWheelEvent;
new(): MouseWheelEvent;
}
interface SVGFitToViewBox {
viewBox: SVGAnimatedRect;
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
}
interface SVGPointList {
numberOfItems: number;
replaceItem(newItem: SVGPoint, index: number): SVGPoint;
getItem(index: number): SVGPoint;
clear(): void;
appendItem(newItem: SVGPoint): SVGPoint;
initialize(newItem: SVGPoint): SVGPoint;
removeItem(index: number): SVGPoint;
insertItemBefore(newItem: SVGPoint, index: number): SVGPoint;
}
declare var SVGPointList: {
prototype: SVGPointList;
new(): SVGPointList;
}
interface SVGAnimatedLengthList {
animVal: SVGLengthList;
baseVal: SVGLengthList;
}
declare var SVGAnimatedLengthList: {
prototype: SVGAnimatedLengthList;
new(): SVGAnimatedLengthList;
}
interface SVGAnimatedPreserveAspectRatio {
animVal: SVGPreserveAspectRatio;
baseVal: SVGPreserveAspectRatio;
}
declare var SVGAnimatedPreserveAspectRatio: {
prototype: SVGAnimatedPreserveAspectRatio;
new(): SVGAnimatedPreserveAspectRatio;
}
interface MSSiteModeEvent extends Event {
buttonID: number;
actionURL: string;
}
declare var MSSiteModeEvent: {
prototype: MSSiteModeEvent;
new(): MSSiteModeEvent;
}
interface DOML2DeprecatedTextFlowControl {
clear: string;
}
interface StyleSheetPageList {
length: number;
item(index: number): CSSPageRule;
[index: number]: CSSPageRule;
}
declare var StyleSheetPageList: {
prototype: StyleSheetPageList;
new(): StyleSheetPageList;
}
interface MSCSSProperties extends CSSStyleDeclaration {
scrollbarShadowColor: string;
scrollbarHighlightColor: string;
layoutGridChar: string;
layoutGridType: string;
textAutospace: string;
textKashidaSpace: string;
writingMode: string;
scrollbarFaceColor: string;
backgroundPositionY: string;
lineBreak: string;
imeMode: string;
msBlockProgression: string;
layoutGridLine: string;
scrollbarBaseColor: string;
layoutGrid: string;
layoutFlow: string;
textKashida: string;
filter: string;
zoom: string;
scrollbarArrowColor: string;
behavior: string;
backgroundPositionX: string;
accelerator: string;
layoutGridMode: string;
textJustifyTrim: string;
scrollbar3dLightColor: string;
msInterpolationMode: string;
scrollbarTrackColor: string;
scrollbarDarkShadowColor: string;
styleFloat: string;
getAttribute(attributeName: string, flags?: number): any;
setAttribute(attributeName: string, AttributeValue: any, flags?: number): void;
removeAttribute(attributeName: string, flags?: number): boolean;
}
declare var MSCSSProperties: {
prototype: MSCSSProperties;
new(): MSCSSProperties;
}
interface SVGExternalResourcesRequired {
externalResourcesRequired: SVGAnimatedBoolean;
}
interface HTMLImageElement extends HTMLElement, MSImageResourceExtensions, MSDataBindingExtensions, MSResourceMetadata {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* The original height of the image resource before sizing.
*/
naturalHeight: number;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* The original width of the image resource before sizing.
*/
naturalWidth: number;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: number;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
hspace: number;
/**
* Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.
*/
longDesc: string;
/**
* Contains the hypertext reference (HREF) of the URL.
*/
href: string;
/**
* Sets or retrieves whether the image is a server-side image map.
*/
isMap: boolean;
/**
* Retrieves whether the object is fully loaded.
*/
complete: boolean;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
crossOrigin: string;
msPlayToPreferredSourceUri: string;
}
declare var HTMLImageElement: {
prototype: HTMLImageElement;
new(): HTMLImageElement;
create(): HTMLImageElement;
}
interface HTMLAreaElement extends HTMLElement {
/**
* Sets or retrieves the protocol portion of a URL.
*/
protocol: string;
/**
* Sets or retrieves the substring of the href property that follows the question mark.
*/
search: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the coordinates of the object.
*/
coords: string;
/**
* Sets or retrieves the host name part of the location or URL.
*/
hostname: string;
/**
* Sets or retrieves the port number associated with a URL.
*/
port: string;
/**
* Sets or retrieves the file name or path specified by the object.
*/
pathname: string;
/**
* Sets or retrieves the hostname and port number of the location or URL.
*/
host: string;
/**
* Sets or retrieves the subsection of the href property that follows the number sign (#).
*/
hash: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or gets whether clicks in this region cause action.
*/
noHref: boolean;
/**
* Sets or retrieves the shape of the object.
*/
shape: string;
/**
* Returns a string representation of an object.
*/
toString(): string;
}
declare var HTMLAreaElement: {
prototype: HTMLAreaElement;
new(): HTMLAreaElement;
}
interface EventTarget {
removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
dispatchEvent(evt: Event): boolean;
}
interface SVGAngle {
valueAsString: string;
valueInSpecifiedUnits: number;
value: number;
unitType: number;
newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
convertToSpecifiedUnits(unitType: number): void;
SVG_ANGLETYPE_RAD: number;
SVG_ANGLETYPE_UNKNOWN: number;
SVG_ANGLETYPE_UNSPECIFIED: number;
SVG_ANGLETYPE_DEG: number;
SVG_ANGLETYPE_GRAD: number;
}
declare var SVGAngle: {
prototype: SVGAngle;
new(): SVGAngle;
SVG_ANGLETYPE_RAD: number;
SVG_ANGLETYPE_UNKNOWN: number;
SVG_ANGLETYPE_UNSPECIFIED: number;
SVG_ANGLETYPE_DEG: number;
SVG_ANGLETYPE_GRAD: number;
}
interface HTMLButtonElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the default or selected value of the control.
*/
value: string;
status: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Gets the classification and default behavior of the button.
*/
type: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Overrides the target attribute on a form element.
*/
formTarget: string;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Overrides the action attribute (where the data on a form is sent) on the parent form element.
*/
formAction: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
*/
formNoValidate: string;
/**
* Used to override the encoding (formEnctype attribute) specified on the form element.
*/
formEnctype: string;
/**
* Overrides the submit method attribute previously specified on a form element.
*/
formMethod: string;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLButtonElement: {
prototype: HTMLButtonElement;
new(): HTMLButtonElement;
}
interface HTMLSourceElement extends HTMLElement {
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Gets or sets the intended media type of the media source.
*/
media: string;
/**
* Gets or sets the MIME type of a media resource.
*/
type: string;
msKeySystem: string;
}
declare var HTMLSourceElement: {
prototype: HTMLSourceElement;
new(): HTMLSourceElement;
}
interface CanvasGradient {
addColorStop(offset: number, color: string): void;
}
declare var CanvasGradient: {
prototype: CanvasGradient;
new(): CanvasGradient;
}
interface KeyboardEvent extends UIEvent {
location: number;
keyCode: number;
shiftKey: boolean;
which: number;
locale: string;
key: string;
altKey: boolean;
metaKey: boolean;
char: string;
ctrlKey: boolean;
repeat: boolean;
charCode: number;
getModifierState(keyArg: string): boolean;
initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void;
DOM_KEY_LOCATION_RIGHT: number;
DOM_KEY_LOCATION_STANDARD: number;
DOM_KEY_LOCATION_LEFT: number;
DOM_KEY_LOCATION_NUMPAD: number;
DOM_KEY_LOCATION_JOYSTICK: number;
DOM_KEY_LOCATION_MOBILE: number;
}
declare var KeyboardEvent: {
prototype: KeyboardEvent;
new(): KeyboardEvent;
DOM_KEY_LOCATION_RIGHT: number;
DOM_KEY_LOCATION_STANDARD: number;
DOM_KEY_LOCATION_LEFT: number;
DOM_KEY_LOCATION_NUMPAD: number;
DOM_KEY_LOCATION_JOYSTICK: number;
DOM_KEY_LOCATION_MOBILE: number;
}
interface MessageEvent extends Event {
source: Window;
origin: string;
data: any;
ports: any;
initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void;
}
declare var MessageEvent: {
prototype: MessageEvent;
new(): MessageEvent;
}
interface SVGElement extends Element {
onmouseover: (ev: MouseEvent) => any;
viewportElement: SVGElement;
onmousemove: (ev: MouseEvent) => any;
onmouseout: (ev: MouseEvent) => any;
ondblclick: (ev: MouseEvent) => any;
onfocusout: (ev: FocusEvent) => any;
onfocusin: (ev: FocusEvent) => any;
xmlbase: string;
onmousedown: (ev: MouseEvent) => any;
onload: (ev: Event) => any;
onmouseup: (ev: MouseEvent) => any;
onclick: (ev: MouseEvent) => any;
ownerSVGElement: SVGSVGElement;
id: string;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var SVGElement: {
prototype: SVGElement;
new(): SVGElement;
}
interface HTMLScriptElement extends HTMLElement {
/**
* Sets or retrieves the status of the script.
*/
defer: boolean;
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
/**
* Retrieves the URL to an external file that contains the source code or data.
*/
src: string;
/**
* Sets or retrieves the object that is bound to the event script.
*/
htmlFor: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the MIME type for the associated scripting engine.
*/
type: string;
/**
* Sets or retrieves the event for which the script is written.
*/
event: string;
async: boolean;
}
declare var HTMLScriptElement: {
prototype: HTMLScriptElement;
new(): HTMLScriptElement;
}
interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle {
/**
* Retrieves the position of the object in the rows collection for the table.
*/
rowIndex: number;
/**
* Retrieves a collection of all cells in the table row.
*/
cells: HTMLCollection;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Retrieves the position of the object in the collection.
*/
sectionRowIndex: number;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
/**
* Removes the specified cell from the table row, as well as from the cells collection.
* @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted.
*/
deleteCell(index?: number): void;
/**
* Creates a new cell in the table row, and adds the cell to the cells collection.
* @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.
*/
insertCell(index?: number): HTMLElement;
}
declare var HTMLTableRowElement: {
prototype: HTMLTableRowElement;
new(): HTMLTableRowElement;
}
interface CanvasRenderingContext2D {
miterLimit: number;
font: string;
globalCompositeOperation: string;
msFillRule: string;
lineCap: string;
msImageSmoothingEnabled: boolean;
lineDashOffset: number;
shadowColor: string;
lineJoin: string;
shadowOffsetX: number;
lineWidth: number;
canvas: HTMLCanvasElement;
strokeStyle: any;
globalAlpha: number;
shadowOffsetY: number;
fillStyle: any;
shadowBlur: number;
textAlign: string;
textBaseline: string;
restore(): void;
setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
save(): void;
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
measureText(text: string): TextMetrics;
isPointInPath(x: number, y: number, fillRule?: string): boolean;
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void;
rotate(angle: number): void;
fillText(text: string, x: number, y: number, maxWidth?: number): void;
translate(x: number, y: number): void;
scale(x: number, y: number): void;
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
lineTo(x: number, y: number): void;
getLineDash(): number[];
fill(fillRule?: string): void;
createImageData(imageDataOrSw: any, sh?: number): ImageData;
createPattern(image: HTMLElement, repetition: string): CanvasPattern;
closePath(): void;
rect(x: number, y: number, w: number, h: number): void;
clip(fillRule?: string): void;
clearRect(x: number, y: number, w: number, h: number): void;
moveTo(x: number, y: number): void;
getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
fillRect(x: number, y: number, w: number, h: number): void;
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
drawImage(image: HTMLElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
stroke(): void;
strokeRect(x: number, y: number, w: number, h: number): void;
setLineDash(segments: number[]): void;
strokeText(text: string, x: number, y: number, maxWidth?: number): void;
beginPath(): void;
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
}
declare var CanvasRenderingContext2D: {
prototype: CanvasRenderingContext2D;
new(): CanvasRenderingContext2D;
}
interface MSCSSRuleList {
length: number;
item(index?: number): CSSStyleRule;
[index: number]: CSSStyleRule;
}
declare var MSCSSRuleList: {
prototype: MSCSSRuleList;
new(): MSCSSRuleList;
}
interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
x: number;
}
declare var SVGPathSegLinetoHorizontalAbs: {
prototype: SVGPathSegLinetoHorizontalAbs;
new(): SVGPathSegLinetoHorizontalAbs;
}
interface SVGPathSegArcAbs extends SVGPathSeg {
y: number;
sweepFlag: boolean;
r2: number;
x: number;
angle: number;
r1: number;
largeArcFlag: boolean;
}
declare var SVGPathSegArcAbs: {
prototype: SVGPathSegArcAbs;
new(): SVGPathSegArcAbs;
}
interface SVGTransformList {
numberOfItems: number;
getItem(index: number): SVGTransform;
consolidate(): SVGTransform;
clear(): void;
appendItem(newItem: SVGTransform): SVGTransform;
initialize(newItem: SVGTransform): SVGTransform;
removeItem(index: number): SVGTransform;
insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;
replaceItem(newItem: SVGTransform, index: number): SVGTransform;
createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
}
declare var SVGTransformList: {
prototype: SVGTransformList;
new(): SVGTransformList;
}
interface HTMLHtmlElement extends HTMLElement {
/**
* Sets or retrieves the DTD version that governs the current document.
*/
version: string;
}
declare var HTMLHtmlElement: {
prototype: HTMLHtmlElement;
new(): HTMLHtmlElement;
}
interface SVGPathSegClosePath extends SVGPathSeg {
}
declare var SVGPathSegClosePath: {
prototype: SVGPathSegClosePath;
new(): SVGPathSegClosePath;
}
interface HTMLFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: any;
/**
* Sets or retrieves whether the frame can be scrolled.
*/
scrolling: string;
/**
* Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
*/
marginHeight: string;
/**
* Sets or retrieves the left and right margin widths before displaying the text in a frame.
*/
marginWidth: string;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
/**
* Sets or retrieves whether the user can resize the frame.
*/
noResize: boolean;
/**
* Retrieves the object of the specified.
*/
contentWindow: Window;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the frame name.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Sets or retrieves a URI to a long description of the object.
*/
longDesc: string;
/**
* Raised when the object has been completely received from the server.
*/
onload: (ev: Event) => any;
/**
* Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
*/
security: any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLFrameElement: {
prototype: HTMLFrameElement;
new(): HTMLFrameElement;
}
interface SVGAnimatedLength {
animVal: SVGLength;
baseVal: SVGLength;
}
declare var SVGAnimatedLength: {
prototype: SVGAnimatedLength;
new(): SVGAnimatedLength;
}
interface SVGAnimatedPoints {
points: SVGPointList;
animatedPoints: SVGPointList;
}
interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGDefsElement: {
prototype: SVGDefsElement;
new(): SVGDefsElement;
}
interface HTMLQuoteElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLQuoteElement: {
prototype: HTMLQuoteElement;
new(): HTMLQuoteElement;
}
interface CSSMediaRule extends CSSRule {
media: MediaList;
cssRules: CSSRuleList;
insertRule(rule: string, index?: number): number;
deleteRule(index?: number): void;
}
declare var CSSMediaRule: {
prototype: CSSMediaRule;
new(): CSSMediaRule;
}
interface WindowModal {
dialogArguments: any;
returnValue: any;
}
interface XMLHttpRequest extends EventTarget {
responseBody: any;
status: number;
readyState: number;
responseText: string;
responseXML: any;
ontimeout: (ev: Event) => any;
statusText: string;
onreadystatechange: (ev: Event) => any;
timeout: number;
onload: (ev: Event) => any;
response: any;
withCredentials: boolean;
onprogress: (ev: ProgressEvent) => any;
onabort: (ev: UIEvent) => any;
responseType: string;
onloadend: (ev: ProgressEvent) => any;
upload: XMLHttpRequestEventTarget;
onerror: (ev: ErrorEvent) => any;
onloadstart: (ev: Event) => any;
msCaching: string;
open(method: string, url: string, async?: boolean, user?: string, password?: string): void;
send(data?: any): void;
abort(): void;
getAllResponseHeaders(): string;
setRequestHeader(header: string, value: string): void;
getResponseHeader(header: string): string;
msCachingEnabled(): boolean;
overrideMimeType(mime: string): void;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XMLHttpRequest: {
prototype: XMLHttpRequest;
new(): XMLHttpRequest;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
create(): XMLHttpRequest;
}
interface HTMLTableHeaderCellElement extends HTMLTableCellElement {
/**
* Sets or retrieves the group of cells in a table to which the object's information applies.
*/
scope: string;
}
declare var HTMLTableHeaderCellElement: {
prototype: HTMLTableHeaderCellElement;
new(): HTMLTableHeaderCellElement;
}
interface HTMLDListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction {
}
declare var HTMLDListElement: {
prototype: HTMLDListElement;
new(): HTMLDListElement;
}
interface MSDataBindingExtensions {
dataSrc: string;
dataFormatAs: string;
dataFld: string;
}
interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
x: number;
}
declare var SVGPathSegLinetoHorizontalRel: {
prototype: SVGPathSegLinetoHorizontalRel;
new(): SVGPathSegLinetoHorizontalRel;
}
interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
ry: SVGAnimatedLength;
cx: SVGAnimatedLength;
rx: SVGAnimatedLength;
cy: SVGAnimatedLength;
}
declare var SVGEllipseElement: {
prototype: SVGEllipseElement;
new(): SVGEllipseElement;
}
interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
target: SVGAnimatedString;
}
declare var SVGAElement: {
prototype: SVGAElement;
new(): SVGAElement;
}
interface SVGStylable {
className: SVGAnimatedString;
style: CSSStyleDeclaration;
}
interface SVGTransformable extends SVGLocatable {
transform: SVGAnimatedTransformList;
}
interface HTMLFrameSetElement extends HTMLElement {
ononline: (ev: Event) => any;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves the frame heights of the object.
*/
rows: string;
/**
* Sets or retrieves the frame widths of the object.
*/
cols: string;
/**
* Fires when the object loses the input focus.
*/
onblur: (ev: FocusEvent) => any;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Fires when the object receives focus.
*/
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
onerror: (ev: ErrorEvent) => any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
onresize: (ev: UIEvent) => any;
name: string;
onafterprint: (ev: Event) => any;
onbeforeprint: (ev: Event) => any;
onoffline: (ev: Event) => any;
border: string;
onunload: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onload: (ev: Event) => any;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
onstorage: (ev: StorageEvent) => any;
onpageshow: (ev: PageTransitionEvent) => any;
onpagehide: (ev: PageTransitionEvent) => any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLFrameSetElement: {
prototype: HTMLFrameSetElement;
new(): HTMLFrameSetElement;
}
interface Screen extends EventTarget {
width: number;
deviceXDPI: number;
fontSmoothingEnabled: boolean;
bufferDepth: number;
logicalXDPI: number;
systemXDPI: number;
availHeight: number;
height: number;
logicalYDPI: number;
systemYDPI: number;
updateInterval: number;
colorDepth: number;
availWidth: number;
deviceYDPI: number;
pixelDepth: number;
msOrientation: string;
onmsorientationchange: (ev: any) => any;
msLockOrientation(orientation: string): boolean;
msLockOrientation(orientations: string[]): boolean;
msUnlockOrientation(): void;
addEventListener(type: "msorientationchange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Screen: {
prototype: Screen;
new(): Screen;
}
interface Coordinates {
altitudeAccuracy: number;
longitude: number;
latitude: number;
speed: number;
heading: number;
altitude: number;
accuracy: number;
}
declare var Coordinates: {
prototype: Coordinates;
new(): Coordinates;
}
interface NavigatorGeolocation {
geolocation: Geolocation;
}
interface NavigatorContentUtils {
}
interface EventListener {
(evt: Event): void;
}
interface SVGLangSpace {
xmllang: string;
xmlspace: string;
}
interface DataTransfer {
effectAllowed: string;
dropEffect: string;
types: DOMStringList;
files: FileList;
clearData(format?: string): boolean;
setData(format: string, data: string): boolean;
getData(format: string): string;
}
declare var DataTransfer: {
prototype: DataTransfer;
new(): DataTransfer;
}
interface FocusEvent extends UIEvent {
relatedTarget: EventTarget;
initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void;
}
declare var FocusEvent: {
prototype: FocusEvent;
new(): FocusEvent;
}
interface Range {
startOffset: number;
collapsed: boolean;
endOffset: number;
startContainer: Node;
endContainer: Node;
commonAncestorContainer: Node;
setStart(refNode: Node, offset: number): void;
setEndBefore(refNode: Node): void;
setStartBefore(refNode: Node): void;
selectNode(refNode: Node): void;
detach(): void;
getBoundingClientRect(): ClientRect;
toString(): string;
compareBoundaryPoints(how: number, sourceRange: Range): number;
insertNode(newNode: Node): void;
collapse(toStart: boolean): void;
selectNodeContents(refNode: Node): void;
cloneContents(): DocumentFragment;
setEnd(refNode: Node, offset: number): void;
cloneRange(): Range;
getClientRects(): ClientRectList;
surroundContents(newParent: Node): void;
deleteContents(): void;
setStartAfter(refNode: Node): void;
extractContents(): DocumentFragment;
setEndAfter(refNode: Node): void;
createContextualFragment(fragment: string): DocumentFragment;
END_TO_END: number;
START_TO_START: number;
START_TO_END: number;
END_TO_START: number;
}
declare var Range: {
prototype: Range;
new(): Range;
END_TO_END: number;
START_TO_START: number;
START_TO_END: number;
END_TO_START: number;
}
interface SVGPoint {
y: number;
x: number;
matrixTransform(matrix: SVGMatrix): SVGPoint;
}
declare var SVGPoint: {
prototype: SVGPoint;
new(): SVGPoint;
}
interface MSPluginsCollection {
length: number;
refresh(reload?: boolean): void;
}
declare var MSPluginsCollection: {
prototype: MSPluginsCollection;
new(): MSPluginsCollection;
}
interface SVGAnimatedNumberList {
animVal: SVGNumberList;
baseVal: SVGNumberList;
}
declare var SVGAnimatedNumberList: {
prototype: SVGAnimatedNumberList;
new(): SVGAnimatedNumberList;
}
interface SVGSVGElement extends SVGElement, SVGStylable, SVGZoomAndPan, DocumentEvent, SVGLangSpace, SVGLocatable, SVGTests, SVGFitToViewBox, SVGExternalResourcesRequired {
width: SVGAnimatedLength;
x: SVGAnimatedLength;
contentStyleType: string;
onzoom: (ev: any) => any;
y: SVGAnimatedLength;
viewport: SVGRect;
onerror: (ev: ErrorEvent) => any;
pixelUnitToMillimeterY: number;
onresize: (ev: UIEvent) => any;
screenPixelToMillimeterY: number;
height: SVGAnimatedLength;
onabort: (ev: UIEvent) => any;
contentScriptType: string;
pixelUnitToMillimeterX: number;
currentTranslate: SVGPoint;
onunload: (ev: Event) => any;
currentScale: number;
onscroll: (ev: UIEvent) => any;
screenPixelToMillimeterX: number;
setCurrentTime(seconds: number): void;
createSVGLength(): SVGLength;
getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList;
unpauseAnimations(): void;
createSVGRect(): SVGRect;
checkIntersection(element: SVGElement, rect: SVGRect): boolean;
unsuspendRedrawAll(): void;
pauseAnimations(): void;
suspendRedraw(maxWaitMilliseconds: number): number;
deselectAll(): void;
createSVGAngle(): SVGAngle;
getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList;
createSVGTransform(): SVGTransform;
unsuspendRedraw(suspendHandleID: number): void;
forceRedraw(): void;
getCurrentTime(): number;
checkEnclosure(element: SVGElement, rect: SVGRect): boolean;
createSVGMatrix(): SVGMatrix;
createSVGPoint(): SVGPoint;
createSVGNumber(): SVGNumber;
createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
getElementById(elementId: string): Element;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "zoom", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var SVGSVGElement: {
prototype: SVGSVGElement;
new(): SVGSVGElement;
}
interface HTMLLabelElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the object to which the given label object is assigned.
*/
htmlFor: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLLabelElement: {
prototype: HTMLLabelElement;
new(): HTMLLabelElement;
}
interface MSResourceMetadata {
protocol: string;
fileSize: string;
fileUpdatedDate: string;
nameProp: string;
fileCreatedDate: string;
fileModifiedDate: string;
mimeType: string;
}
interface HTMLLegendElement extends HTMLElement, MSDataBindingExtensions {
/**
* Retrieves a reference to the form that the object is embedded in.
*/
align: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLLegendElement: {
prototype: HTMLLegendElement;
new(): HTMLLegendElement;
}
interface HTMLDirectoryElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
}
declare var HTMLDirectoryElement: {
prototype: HTMLDirectoryElement;
new(): HTMLDirectoryElement;
}
interface SVGAnimatedInteger {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedInteger: {
prototype: SVGAnimatedInteger;
new(): SVGAnimatedInteger;
}
interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable {
}
declare var SVGTextElement: {
prototype: SVGTextElement;
new(): SVGTextElement;
}
interface SVGTSpanElement extends SVGTextPositioningElement {
}
declare var SVGTSpanElement: {
prototype: SVGTSpanElement;
new(): SVGTSpanElement;
}
interface HTMLLIElement extends HTMLElement, DOML2DeprecatedListNumberingAndBulletStyle {
/**
* Sets or retrieves the value of a list item.
*/
value: number;
}
declare var HTMLLIElement: {
prototype: HTMLLIElement;
new(): HTMLLIElement;
}
interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
y: number;
}
declare var SVGPathSegLinetoVerticalAbs: {
prototype: SVGPathSegLinetoVerticalAbs;
new(): SVGPathSegLinetoVerticalAbs;
}
interface MSStorageExtensions {
remainingSpace: number;
}
interface SVGStyleElement extends SVGElement, SVGLangSpace {
media: string;
type: string;
title: string;
}
declare var SVGStyleElement: {
prototype: SVGStyleElement;
new(): SVGStyleElement;
}
interface MSCurrentStyleCSSProperties extends MSCSSProperties {
blockDirection: string;
clipBottom: string;
clipLeft: string;
clipRight: string;
clipTop: string;
hasLayout: string;
}
declare var MSCurrentStyleCSSProperties: {
prototype: MSCurrentStyleCSSProperties;
new(): MSCurrentStyleCSSProperties;
}
interface MSHTMLCollectionExtensions {
urns(urn: any): any;
tags(tagName: any): any;
}
interface Storage extends MSStorageExtensions {
length: number;
getItem(key: string): any;
[key: string]: any;
setItem(key: string, data: string): void;
clear(): void;
removeItem(key: string): void;
key(index: number): string;
[index: number]: string;
}
declare var Storage: {
prototype: Storage;
new(): Storage;
}
interface HTMLIFrameElement extends HTMLElement, GetSVGDocument, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves whether the frame can be scrolled.
*/
scrolling: string;
/**
* Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
*/
marginHeight: string;
/**
* Sets or retrieves the left and right margin widths before displaying the text in a frame.
*/
marginWidth: string;
/**
* Sets or retrieves the amount of additional space between the frames.
*/
frameSpacing: any;
/**
* Sets or retrieves whether to display a border for the frame.
*/
frameBorder: string;
/**
* Sets or retrieves whether the user can resize the frame.
*/
noResize: boolean;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* Retrieves the object of the specified.
*/
contentWindow: Window;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the frame name.
*/
name: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Specifies the properties of a border drawn around an object.
*/
border: string;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Sets or retrieves the horizontal margin for the object.
*/
hspace: number;
/**
* Sets or retrieves a URI to a long description of the object.
*/
longDesc: string;
/**
* Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
*/
security: any;
/**
* Raised when the object has been completely received from the server.
*/
onload: (ev: Event) => any;
sandbox: DOMSettableTokenList;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLIFrameElement: {
prototype: HTMLIFrameElement;
new(): HTMLIFrameElement;
}
interface TextRangeCollection {
length: number;
item(index: number): TextRange;
[index: number]: TextRange;
}
declare var TextRangeCollection: {
prototype: TextRangeCollection;
new(): TextRangeCollection;
}
interface HTMLBodyElement extends HTMLElement, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
scroll: string;
ononline: (ev: Event) => any;
onblur: (ev: FocusEvent) => any;
noWrap: boolean;
onfocus: (ev: FocusEvent) => any;
onmessage: (ev: MessageEvent) => any;
text: any;
onerror: (ev: ErrorEvent) => any;
bgProperties: string;
onresize: (ev: UIEvent) => any;
link: any;
aLink: any;
bottomMargin: any;
topMargin: any;
onafterprint: (ev: Event) => any;
vLink: any;
onbeforeprint: (ev: Event) => any;
onoffline: (ev: Event) => any;
onunload: (ev: Event) => any;
onhashchange: (ev: Event) => any;
onload: (ev: Event) => any;
rightMargin: any;
onbeforeunload: (ev: BeforeUnloadEvent) => any;
leftMargin: any;
onstorage: (ev: StorageEvent) => any;
onpopstate: (ev: PopStateEvent) => any;
onpageshow: (ev: PageTransitionEvent) => any;
onpagehide: (ev: PageTransitionEvent) => any;
createTextRange(): TextRange;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLBodyElement: {
prototype: HTMLBodyElement;
new(): HTMLBodyElement;
}
interface DocumentType extends Node {
name: string;
notations: NamedNodeMap;
systemId: string;
internalSubset: string;
entities: NamedNodeMap;
publicId: string;
}
declare var DocumentType: {
prototype: DocumentType;
new(): DocumentType;
}
interface SVGRadialGradientElement extends SVGGradientElement {
cx: SVGAnimatedLength;
r: SVGAnimatedLength;
cy: SVGAnimatedLength;
fx: SVGAnimatedLength;
fy: SVGAnimatedLength;
}
declare var SVGRadialGradientElement: {
prototype: SVGRadialGradientElement;
new(): SVGRadialGradientElement;
}
interface MutationEvent extends Event {
newValue: string;
attrChange: number;
attrName: string;
prevValue: string;
relatedNode: Node;
initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void;
MODIFICATION: number;
REMOVAL: number;
ADDITION: number;
}
declare var MutationEvent: {
prototype: MutationEvent;
new(): MutationEvent;
MODIFICATION: number;
REMOVAL: number;
ADDITION: number;
}
interface DragEvent extends MouseEvent {
dataTransfer: DataTransfer;
initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void;
msConvertURL(file: File, targetType: string, targetURL?: string): void;
}
declare var DragEvent: {
prototype: DragEvent;
new(): DragEvent;
}
interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: HTMLCollection;
/**
* Removes the specified row (tr) from the element and from the rows collection.
* @param index Number that specifies the zero-based position in the rows collection of the row to remove.
*/
deleteRow(index?: number): void;
/**
* Moves a table row to a new position.
* @param indexFrom Number that specifies the index in the rows collection of the table row that is moved.
* @param indexTo Number that specifies where the row is moved within the rows collection.
*/
moveRow(indexFrom?: number, indexTo?: number): any;
/**
* Creates a new row (tr) in the table, and adds the row to the rows collection.
* @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
*/
insertRow(index?: number): HTMLElement;
}
declare var HTMLTableSectionElement: {
prototype: HTMLTableSectionElement;
new(): HTMLTableSectionElement;
}
interface DOML2DeprecatedListNumberingAndBulletStyle {
type: string;
}
interface HTMLInputElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
status: boolean;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Gets or sets the starting position or offset of a text selection.
*/
selectionStart: number;
indeterminate: boolean;
readOnly: boolean;
size: number;
loop: number;
/**
* Gets or sets the end position or offset of a text selection.
*/
selectionEnd: number;
/**
* Sets or retrieves the URL of the virtual reality modeling language (VRML) world to be displayed in the window.
*/
vrml: string;
/**
* Sets or retrieves a lower resolution image to display.
*/
lowsrc: string;
/**
* Sets or retrieves the vertical margin for the object.
*/
vspace: number;
/**
* Sets or retrieves a comma-separated list of content types.
*/
accept: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the state of the check box or radio button.
*/
defaultChecked: boolean;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Returns the value of the data at the cursor's current position.
*/
value: string;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
border: string;
dynsrc: string;
/**
* Sets or retrieves the state of the check box or radio button.
*/
checked: boolean;
/**
* Sets or retrieves the width of the border to draw around the object.
*/
hspace: number;
/**
* Sets or retrieves the maximum number of characters that the user can enter in a text control.
*/
maxLength: number;
/**
* Returns the content type of the object.
*/
type: string;
/**
* Sets or retrieves the initial contents of the object.
*/
defaultValue: string;
/**
* Retrieves whether the object is fully loaded.
*/
complete: boolean;
start: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a FileList object on a file type input object.
*/
files: FileList;
/**
* Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field.
*/
max: string;
/**
* Overrides the target attribute on a form element.
*/
formTarget: string;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field.
*/
step: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Used to override the encoding (formEnctype attribute) specified on the form element.
*/
formEnctype: string;
/**
* Returns the input field value as a number.
*/
valueAsNumber: number;
/**
* Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
*/
placeholder: string;
/**
* Overrides the submit method attribute previously specified on a form element.
*/
formMethod: string;
/**
* Specifies the ID of a pre-defined datalist of options for an input element.
*/
list: HTMLElement;
/**
* Specifies whether autocomplete is applied to an editable text field.
*/
autocomplete: string;
/**
* Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field.
*/
min: string;
/**
* Overrides the action attribute (where the data on a form is sent) on the parent form element.
*/
formAction: string;
/**
* Gets or sets a string containing a regular expression that the user's input must match.
*/
pattern: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
*/
formNoValidate: string;
/**
* Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
*/
multiple: boolean;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Sets the start and end positions of a selection in a text field.
* @param start The offset into the text field for the start of the selection.
* @param end The offset into the text field for the end of the selection.
*/
setSelectionRange(start: number, end: number): void;
/**
* Makes the selection equal to the current object.
*/
select(): void;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value.
* @param n Value to decrement the value by.
*/
stepDown(n?: number): void;
/**
* Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value.
* @param n Value to increment the value by.
*/
stepUp(n?: number): void;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLInputElement: {
prototype: HTMLInputElement;
new(): HTMLInputElement;
}
interface HTMLAnchorElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rel: string;
/**
* Contains the protocol of the URL.
*/
protocol: string;
/**
* Sets or retrieves the substring of the href property that follows the question mark.
*/
search: string;
/**
* Sets or retrieves the coordinates of the object.
*/
coords: string;
/**
* Contains the hostname of a URL.
*/
hostname: string;
/**
* Contains the pathname of the URL.
*/
pathname: string;
Methods: string;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
protocolLong: string;
/**
* Sets or retrieves a destination URL or an anchor point.
*/
href: string;
/**
* Sets or retrieves the shape of the object.
*/
name: string;
/**
* Sets or retrieves the character set used to encode the object.
*/
charset: string;
/**
* Sets or retrieves the language code of the object.
*/
hreflang: string;
/**
* Sets or retrieves the port number associated with a URL.
*/
port: string;
/**
* Contains the hostname and port values of the URL.
*/
host: string;
/**
* Contains the anchor portion of the URL including the hash sign (#).
*/
hash: string;
nameProp: string;
urn: string;
/**
* Sets or retrieves the relationship between the object and the destination of the link.
*/
rev: string;
/**
* Sets or retrieves the shape of the object.
*/
shape: string;
type: string;
mimeType: string;
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
/**
* Returns a string representation of an object.
*/
toString(): string;
}
declare var HTMLAnchorElement: {
prototype: HTMLAnchorElement;
new(): HTMLAnchorElement;
}
interface HTMLParamElement extends HTMLElement {
/**
* Sets or retrieves the value of an input parameter for an element.
*/
value: string;
/**
* Sets or retrieves the name of an input parameter for an element.
*/
name: string;
/**
* Sets or retrieves the content type of the resource designated by the value attribute.
*/
type: string;
/**
* Sets or retrieves the data type of the value attribute.
*/
valueType: string;
}
declare var HTMLParamElement: {
prototype: HTMLParamElement;
new(): HTMLParamElement;
}
interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGImageElement: {
prototype: SVGImageElement;
new(): SVGImageElement;
}
interface SVGAnimatedNumber {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedNumber: {
prototype: SVGAnimatedNumber;
new(): SVGAnimatedNumber;
}
interface PerformanceTiming {
redirectStart: number;
domainLookupEnd: number;
responseStart: number;
domComplete: number;
domainLookupStart: number;
loadEventStart: number;
msFirstPaint: number;
unloadEventEnd: number;
fetchStart: number;
requestStart: number;
domInteractive: number;
navigationStart: number;
connectEnd: number;
loadEventEnd: number;
connectStart: number;
responseEnd: number;
domLoading: number;
redirectEnd: number;
unloadEventStart: number;
domContentLoadedEventStart: number;
domContentLoadedEventEnd: number;
toJSON(): any;
}
declare var PerformanceTiming: {
prototype: PerformanceTiming;
new(): PerformanceTiming;
}
interface HTMLPreElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or gets a value that you can use to implement your own width functionality for the object.
*/
width: number;
/**
* Indicates a citation by rendering text in italic type.
*/
cite: string;
}
declare var HTMLPreElement: {
prototype: HTMLPreElement;
new(): HTMLPreElement;
}
interface EventException {
code: number;
message: string;
name: string;
toString(): string;
DISPATCH_REQUEST_ERR: number;
UNSPECIFIED_EVENT_TYPE_ERR: number;
}
declare var EventException: {
prototype: EventException;
new(): EventException;
DISPATCH_REQUEST_ERR: number;
UNSPECIFIED_EVENT_TYPE_ERR: number;
}
interface MSNavigatorDoNotTrack {
msDoNotTrack: string;
removeSiteSpecificTrackingException(args: ExceptionInformation): void;
removeWebWideTrackingException(args: ExceptionInformation): void;
storeWebWideTrackingException(args: StoreExceptionsInformation): void;
storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void;
confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean;
confirmWebWideTrackingException(args: ExceptionInformation): boolean;
}
interface NavigatorOnLine {
onLine: boolean;
}
interface WindowLocalStorage {
localStorage: Storage;
}
interface SVGMetadataElement extends SVGElement {
}
declare var SVGMetadataElement: {
prototype: SVGMetadataElement;
new(): SVGMetadataElement;
}
interface SVGPathSegArcRel extends SVGPathSeg {
y: number;
sweepFlag: boolean;
r2: number;
x: number;
angle: number;
r1: number;
largeArcFlag: boolean;
}
declare var SVGPathSegArcRel: {
prototype: SVGPathSegArcRel;
new(): SVGPathSegArcRel;
}
interface SVGPathSegMovetoAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegMovetoAbs: {
prototype: SVGPathSegMovetoAbs;
new(): SVGPathSegMovetoAbs;
}
interface SVGStringList {
numberOfItems: number;
replaceItem(newItem: string, index: number): string;
getItem(index: number): string;
clear(): void;
appendItem(newItem: string): string;
initialize(newItem: string): string;
removeItem(index: number): string;
insertItemBefore(newItem: string, index: number): string;
}
declare var SVGStringList: {
prototype: SVGStringList;
new(): SVGStringList;
}
interface XDomainRequest {
timeout: number;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
onprogress: (ev: ProgressEvent) => any;
ontimeout: (ev: Event) => any;
responseText: string;
contentType: string;
open(method: string, url: string): void;
abort(): void;
send(data?: any): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XDomainRequest: {
prototype: XDomainRequest;
new(): XDomainRequest;
create(): XDomainRequest;
}
interface DOML2DeprecatedBackgroundColorStyle {
bgColor: any;
}
interface ElementTraversal {
childElementCount: number;
previousElementSibling: Element;
lastElementChild: Element;
nextElementSibling: Element;
firstElementChild: Element;
}
interface SVGLength {
valueAsString: string;
valueInSpecifiedUnits: number;
value: number;
unitType: number;
newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
convertToSpecifiedUnits(unitType: number): void;
SVG_LENGTHTYPE_NUMBER: number;
SVG_LENGTHTYPE_CM: number;
SVG_LENGTHTYPE_PC: number;
SVG_LENGTHTYPE_PERCENTAGE: number;
SVG_LENGTHTYPE_MM: number;
SVG_LENGTHTYPE_PT: number;
SVG_LENGTHTYPE_IN: number;
SVG_LENGTHTYPE_EMS: number;
SVG_LENGTHTYPE_PX: number;
SVG_LENGTHTYPE_UNKNOWN: number;
SVG_LENGTHTYPE_EXS: number;
}
declare var SVGLength: {
prototype: SVGLength;
new(): SVGLength;
SVG_LENGTHTYPE_NUMBER: number;
SVG_LENGTHTYPE_CM: number;
SVG_LENGTHTYPE_PC: number;
SVG_LENGTHTYPE_PERCENTAGE: number;
SVG_LENGTHTYPE_MM: number;
SVG_LENGTHTYPE_PT: number;
SVG_LENGTHTYPE_IN: number;
SVG_LENGTHTYPE_EMS: number;
SVG_LENGTHTYPE_PX: number;
SVG_LENGTHTYPE_UNKNOWN: number;
SVG_LENGTHTYPE_EXS: number;
}
interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGPolygonElement: {
prototype: SVGPolygonElement;
new(): SVGPolygonElement;
}
interface HTMLPhraseElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLPhraseElement: {
prototype: HTMLPhraseElement;
new(): HTMLPhraseElement;
}
interface NavigatorStorageUtils {
}
interface SVGPathSegCurvetoCubicRel extends SVGPathSeg {
y: number;
y1: number;
x2: number;
x: number;
x1: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicRel: {
prototype: SVGPathSegCurvetoCubicRel;
new(): SVGPathSegCurvetoCubicRel;
}
interface SVGTextContentElement extends SVGElement, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
textLength: SVGAnimatedLength;
lengthAdjust: SVGAnimatedEnumeration;
getCharNumAtPosition(point: SVGPoint): number;
getStartPositionOfChar(charnum: number): SVGPoint;
getExtentOfChar(charnum: number): SVGRect;
getComputedTextLength(): number;
getSubStringLength(charnum: number, nchars: number): number;
selectSubString(charnum: number, nchars: number): void;
getNumberOfChars(): number;
getRotationOfChar(charnum: number): number;
getEndPositionOfChar(charnum: number): SVGPoint;
LENGTHADJUST_SPACING: number;
LENGTHADJUST_SPACINGANDGLYPHS: number;
LENGTHADJUST_UNKNOWN: number;
}
declare var SVGTextContentElement: {
prototype: SVGTextContentElement;
new(): SVGTextContentElement;
LENGTHADJUST_SPACING: number;
LENGTHADJUST_SPACINGANDGLYPHS: number;
LENGTHADJUST_UNKNOWN: number;
}
interface DOML2DeprecatedColorProperty {
color: string;
}
interface Location {
hash: string;
protocol: string;
search: string;
href: string;
hostname: string;
port: string;
pathname: string;
host: string;
reload(flag?: boolean): void;
replace(url: string): void;
assign(url: string): void;
toString(): string;
}
declare var Location: {
prototype: Location;
new(): Location;
}
interface HTMLTitleElement extends HTMLElement {
/**
* Retrieves or sets the text of the object as a string.
*/
text: string;
}
declare var HTMLTitleElement: {
prototype: HTMLTitleElement;
new(): HTMLTitleElement;
}
interface HTMLStyleElement extends HTMLElement, LinkStyle {
/**
* Sets or retrieves the media type.
*/
media: string;
/**
* Retrieves the CSS language in which the style sheet is written.
*/
type: string;
}
declare var HTMLStyleElement: {
prototype: HTMLStyleElement;
new(): HTMLStyleElement;
}
interface PerformanceEntry {
name: string;
startTime: number;
duration: number;
entryType: string;
}
declare var PerformanceEntry: {
prototype: PerformanceEntry;
new(): PerformanceEntry;
}
interface SVGTransform {
type: number;
angle: number;
matrix: SVGMatrix;
setTranslate(tx: number, ty: number): void;
setScale(sx: number, sy: number): void;
setMatrix(matrix: SVGMatrix): void;
setSkewY(angle: number): void;
setRotate(angle: number, cx: number, cy: number): void;
setSkewX(angle: number): void;
SVG_TRANSFORM_SKEWX: number;
SVG_TRANSFORM_UNKNOWN: number;
SVG_TRANSFORM_SCALE: number;
SVG_TRANSFORM_TRANSLATE: number;
SVG_TRANSFORM_MATRIX: number;
SVG_TRANSFORM_ROTATE: number;
SVG_TRANSFORM_SKEWY: number;
}
declare var SVGTransform: {
prototype: SVGTransform;
new(): SVGTransform;
SVG_TRANSFORM_SKEWX: number;
SVG_TRANSFORM_UNKNOWN: number;
SVG_TRANSFORM_SCALE: number;
SVG_TRANSFORM_TRANSLATE: number;
SVG_TRANSFORM_MATRIX: number;
SVG_TRANSFORM_ROTATE: number;
SVG_TRANSFORM_SKEWY: number;
}
interface UIEvent extends Event {
detail: number;
view: Window;
initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void;
}
declare var UIEvent: {
prototype: UIEvent;
new(): UIEvent;
}
interface SVGURIReference {
href: SVGAnimatedString;
}
interface SVGPathSeg {
pathSegType: number;
pathSegTypeAsLetter: string;
PATHSEG_MOVETO_REL: number;
PATHSEG_LINETO_VERTICAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
PATHSEG_CURVETO_QUADRATIC_REL: number;
PATHSEG_CURVETO_CUBIC_ABS: number;
PATHSEG_LINETO_HORIZONTAL_ABS: number;
PATHSEG_CURVETO_QUADRATIC_ABS: number;
PATHSEG_LINETO_ABS: number;
PATHSEG_CLOSEPATH: number;
PATHSEG_LINETO_HORIZONTAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
PATHSEG_LINETO_REL: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
PATHSEG_ARC_REL: number;
PATHSEG_CURVETO_CUBIC_REL: number;
PATHSEG_UNKNOWN: number;
PATHSEG_LINETO_VERTICAL_ABS: number;
PATHSEG_ARC_ABS: number;
PATHSEG_MOVETO_ABS: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
}
declare var SVGPathSeg: {
prototype: SVGPathSeg;
new(): SVGPathSeg;
PATHSEG_MOVETO_REL: number;
PATHSEG_LINETO_VERTICAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
PATHSEG_CURVETO_QUADRATIC_REL: number;
PATHSEG_CURVETO_CUBIC_ABS: number;
PATHSEG_LINETO_HORIZONTAL_ABS: number;
PATHSEG_CURVETO_QUADRATIC_ABS: number;
PATHSEG_LINETO_ABS: number;
PATHSEG_CLOSEPATH: number;
PATHSEG_LINETO_HORIZONTAL_REL: number;
PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
PATHSEG_LINETO_REL: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
PATHSEG_ARC_REL: number;
PATHSEG_CURVETO_CUBIC_REL: number;
PATHSEG_UNKNOWN: number;
PATHSEG_LINETO_VERTICAL_ABS: number;
PATHSEG_ARC_ABS: number;
PATHSEG_MOVETO_ABS: number;
PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
}
interface WheelEvent extends MouseEvent {
deltaZ: number;
deltaX: number;
deltaMode: number;
deltaY: number;
initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void;
getCurrentPoint(element: Element): void;
DOM_DELTA_PIXEL: number;
DOM_DELTA_LINE: number;
DOM_DELTA_PAGE: number;
}
declare var WheelEvent: {
prototype: WheelEvent;
new(): WheelEvent;
DOM_DELTA_PIXEL: number;
DOM_DELTA_LINE: number;
DOM_DELTA_PAGE: number;
}
interface MSEventAttachmentTarget {
attachEvent(event: string, listener: EventListener): boolean;
detachEvent(event: string, listener: EventListener): void;
}
interface SVGNumber {
value: number;
}
declare var SVGNumber: {
prototype: SVGNumber;
new(): SVGNumber;
}
interface SVGPathElement extends SVGElement, SVGStylable, SVGAnimatedPathData, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
getPathSegAtLength(distance: number): number;
getPointAtLength(distance: number): SVGPoint;
createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs;
createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel;
createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel;
createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs;
createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs;
createSVGPathSegClosePath(): SVGPathSegClosePath;
createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel;
createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel;
createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel;
createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs;
createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs;
createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel;
createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel;
createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs;
createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel;
getTotalLength(): number;
createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel;
createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs;
createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs;
createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs;
}
declare var SVGPathElement: {
prototype: SVGPathElement;
new(): SVGPathElement;
}
interface MSCompatibleInfo {
version: string;
userAgent: string;
}
declare var MSCompatibleInfo: {
prototype: MSCompatibleInfo;
new(): MSCompatibleInfo;
}
interface Text extends CharacterData, MSNodeExtensions {
wholeText: string;
splitText(offset: number): Text;
replaceWholeText(content: string): Text;
}
declare var Text: {
prototype: Text;
new(): Text;
}
interface SVGAnimatedRect {
animVal: SVGRect;
baseVal: SVGRect;
}
declare var SVGAnimatedRect: {
prototype: SVGAnimatedRect;
new(): SVGAnimatedRect;
}
interface CSSNamespaceRule extends CSSRule {
namespaceURI: string;
prefix: string;
}
declare var CSSNamespaceRule: {
prototype: CSSNamespaceRule;
new(): CSSNamespaceRule;
}
interface SVGPathSegList {
numberOfItems: number;
replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg;
getItem(index: number): SVGPathSeg;
clear(): void;
appendItem(newItem: SVGPathSeg): SVGPathSeg;
initialize(newItem: SVGPathSeg): SVGPathSeg;
removeItem(index: number): SVGPathSeg;
insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg;
}
declare var SVGPathSegList: {
prototype: SVGPathSegList;
new(): SVGPathSegList;
}
interface HTMLUnknownElement extends HTMLElement, MSDataBindingRecordSetReadonlyExtensions {
}
declare var HTMLUnknownElement: {
prototype: HTMLUnknownElement;
new(): HTMLUnknownElement;
}
interface HTMLAudioElement extends HTMLMediaElement {
}
declare var HTMLAudioElement: {
prototype: HTMLAudioElement;
new(): HTMLAudioElement;
}
interface MSImageResourceExtensions {
dynsrc: string;
vrml: string;
lowsrc: string;
start: string;
loop: number;
}
interface PositionError {
code: number;
message: string;
toString(): string;
POSITION_UNAVAILABLE: number;
PERMISSION_DENIED: number;
TIMEOUT: number;
}
declare var PositionError: {
prototype: PositionError;
new(): PositionError;
POSITION_UNAVAILABLE: number;
PERMISSION_DENIED: number;
TIMEOUT: number;
}
interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment, DOML2DeprecatedBackgroundStyle, DOML2DeprecatedBackgroundColorStyle {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves a list of header cells that provide information for the object.
*/
headers: string;
/**
* Retrieves the position of the object in the cells collection of a row.
*/
cellIndex: number;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorLight: any;
/**
* Sets or retrieves the number columns in the table that the object should span.
*/
colSpan: number;
/**
* Sets or retrieves the border color of the object.
*/
borderColor: any;
/**
* Sets or retrieves a comma-delimited list of conceptual categories associated with the object.
*/
axis: string;
/**
* Sets or retrieves the height of the object.
*/
height: any;
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
/**
* Sets or retrieves abbreviated text for the object.
*/
abbr: string;
/**
* Sets or retrieves how many rows in a table the cell should span.
*/
rowSpan: number;
/**
* Sets or retrieves the group of cells in a table to which the object's information applies.
*/
scope: string;
/**
* Sets or retrieves the color for one of the two colors used to draw the 3-D border of the object.
*/
borderColorDark: any;
}
declare var HTMLTableCellElement: {
prototype: HTMLTableCellElement;
new(): HTMLTableCellElement;
}
interface SVGElementInstance extends EventTarget {
previousSibling: SVGElementInstance;
parentNode: SVGElementInstance;
lastChild: SVGElementInstance;
nextSibling: SVGElementInstance;
childNodes: SVGElementInstanceList;
correspondingUseElement: SVGUseElement;
correspondingElement: SVGElement;
firstChild: SVGElementInstance;
}
declare var SVGElementInstance: {
prototype: SVGElementInstance;
new(): SVGElementInstance;
}
interface MSNamespaceInfoCollection {
length: number;
add(namespace?: string, urn?: string, implementationUrl?: any): any;
item(index: any): any;
// [index: any]: any;
}
declare var MSNamespaceInfoCollection: {
prototype: MSNamespaceInfoCollection;
new(): MSNamespaceInfoCollection;
}
interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
cx: SVGAnimatedLength;
r: SVGAnimatedLength;
cy: SVGAnimatedLength;
}
declare var SVGCircleElement: {
prototype: SVGCircleElement;
new(): SVGCircleElement;
}
interface StyleSheetList {
length: number;
item(index?: number): StyleSheet;
[index: number]: StyleSheet;
}
declare var StyleSheetList: {
prototype: StyleSheetList;
new(): StyleSheetList;
}
interface CSSImportRule extends CSSRule {
styleSheet: CSSStyleSheet;
href: string;
media: MediaList;
}
declare var CSSImportRule: {
prototype: CSSImportRule;
new(): CSSImportRule;
}
interface CustomEvent extends Event {
detail: any;
initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void;
}
declare var CustomEvent: {
prototype: CustomEvent;
new(): CustomEvent;
}
interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty {
/**
* Sets or retrieves the current typeface family.
*/
face: string;
/**
* Sets or retrieves the font size of the object.
*/
size: number;
}
declare var HTMLBaseFontElement: {
prototype: HTMLBaseFontElement;
new(): HTMLBaseFontElement;
}
interface HTMLTextAreaElement extends HTMLElement, MSDataBindingExtensions {
/**
* Retrieves or sets the text in the entry field of the textArea element.
*/
value: string;
/**
* Sets or retrieves the value indicating whether the control is selected.
*/
status: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Gets or sets the starting position or offset of a text selection.
*/
selectionStart: number;
/**
* Sets or retrieves the number of horizontal rows contained in the object.
*/
rows: number;
/**
* Sets or retrieves the width of the object.
*/
cols: number;
/**
* Sets or retrieves the value indicated whether the content of the object is read-only.
*/
readOnly: boolean;
/**
* Sets or retrieves how to handle wordwrapping in the object.
*/
wrap: string;
/**
* Gets or sets the end position or offset of a text selection.
*/
selectionEnd: number;
/**
* Retrieves the type of control.
*/
type: string;
/**
* Sets or retrieves the initial contents of the object.
*/
defaultValue: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
*/
autofocus: boolean;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* When present, marks an element that can't be submitted without a value.
*/
required: boolean;
/**
* Sets or retrieves the maximum number of characters that the user can enter in a text control.
*/
maxLength: number;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
*/
placeholder: string;
/**
* Creates a TextRange object for the element.
*/
createTextRange(): TextRange;
/**
* Sets the start and end positions of a selection in a text field.
* @param start The offset into the text field for the start of the selection.
* @param end The offset into the text field for the end of the selection.
*/
setSelectionRange(start: number, end: number): void;
/**
* Highlights the input area of a form element.
*/
select(): void;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLTextAreaElement: {
prototype: HTMLTextAreaElement;
new(): HTMLTextAreaElement;
}
interface Geolocation {
clearWatch(watchId: number): void;
getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void;
watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number;
}
declare var Geolocation: {
prototype: Geolocation;
new(): Geolocation;
}
interface DOML2DeprecatedMarginStyle {
vspace: number;
hspace: number;
}
interface MSWindowModeless {
dialogTop: any;
dialogLeft: any;
dialogWidth: any;
dialogHeight: any;
menuArguments: any;
}
interface DOML2DeprecatedAlignmentStyle {
align: string;
}
interface HTMLMarqueeElement extends HTMLElement, MSDataBindingExtensions, DOML2DeprecatedBackgroundColorStyle {
width: string;
onbounce: (ev: Event) => any;
vspace: number;
trueSpeed: boolean;
scrollAmount: number;
scrollDelay: number;
behavior: string;
height: string;
loop: number;
direction: string;
hspace: number;
onstart: (ev: Event) => any;
onfinish: (ev: Event) => any;
stop(): void;
start(): void;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLMarqueeElement: {
prototype: HTMLMarqueeElement;
new(): HTMLMarqueeElement;
}
interface SVGRect {
y: number;
width: number;
x: number;
height: number;
}
declare var SVGRect: {
prototype: SVGRect;
new(): SVGRect;
}
interface MSNodeExtensions {
swapNode(otherNode: Node): Node;
removeNode(deep?: boolean): Node;
replaceNode(replacement: Node): Node;
}
interface History {
length: number;
state: any;
back(distance?: any): void;
forward(distance?: any): void;
go(delta?: any): void;
replaceState(statedata: any, title: string, url?: string): void;
pushState(statedata: any, title: string, url?: string): void;
}
declare var History: {
prototype: History;
new(): History;
}
interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
y: number;
y1: number;
x2: number;
x: number;
x1: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicAbs: {
prototype: SVGPathSegCurvetoCubicAbs;
new(): SVGPathSegCurvetoCubicAbs;
}
interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
y: number;
y1: number;
x: number;
x1: number;
}
declare var SVGPathSegCurvetoQuadraticAbs: {
prototype: SVGPathSegCurvetoQuadraticAbs;
new(): SVGPathSegCurvetoQuadraticAbs;
}
interface TimeRanges {
length: number;
start(index: number): number;
end(index: number): number;
}
declare var TimeRanges: {
prototype: TimeRanges;
new(): TimeRanges;
}
interface CSSRule {
cssText: string;
parentStyleSheet: CSSStyleSheet;
parentRule: CSSRule;
type: number;
IMPORT_RULE: number;
MEDIA_RULE: number;
STYLE_RULE: number;
NAMESPACE_RULE: number;
PAGE_RULE: number;
UNKNOWN_RULE: number;
FONT_FACE_RULE: number;
CHARSET_RULE: number;
KEYFRAMES_RULE: number;
KEYFRAME_RULE: number;
VIEWPORT_RULE: number;
}
declare var CSSRule: {
prototype: CSSRule;
new(): CSSRule;
IMPORT_RULE: number;
MEDIA_RULE: number;
STYLE_RULE: number;
NAMESPACE_RULE: number;
PAGE_RULE: number;
UNKNOWN_RULE: number;
FONT_FACE_RULE: number;
CHARSET_RULE: number;
KEYFRAMES_RULE: number;
KEYFRAME_RULE: number;
VIEWPORT_RULE: number;
}
interface SVGPathSegLinetoAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegLinetoAbs: {
prototype: SVGPathSegLinetoAbs;
new(): SVGPathSegLinetoAbs;
}
interface HTMLModElement extends HTMLElement {
/**
* Sets or retrieves the date and time of a modification to the object.
*/
dateTime: string;
/**
* Sets or retrieves reference information about the object.
*/
cite: string;
}
declare var HTMLModElement: {
prototype: HTMLModElement;
new(): HTMLModElement;
}
interface SVGMatrix {
e: number;
c: number;
a: number;
b: number;
d: number;
f: number;
multiply(secondMatrix: SVGMatrix): SVGMatrix;
flipY(): SVGMatrix;
skewY(angle: number): SVGMatrix;
inverse(): SVGMatrix;
scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix;
rotate(angle: number): SVGMatrix;
flipX(): SVGMatrix;
translate(x: number, y: number): SVGMatrix;
scale(scaleFactor: number): SVGMatrix;
rotateFromVector(x: number, y: number): SVGMatrix;
skewX(angle: number): SVGMatrix;
}
declare var SVGMatrix: {
prototype: SVGMatrix;
new(): SVGMatrix;
}
interface MSPopupWindow {
document: Document;
isOpen: boolean;
show(x: number, y: number, w: number, h: number, element?: any): void;
hide(): void;
}
declare var MSPopupWindow: {
prototype: MSPopupWindow;
new(): MSPopupWindow;
}
interface BeforeUnloadEvent extends Event {
returnValue: string;
}
declare var BeforeUnloadEvent: {
prototype: BeforeUnloadEvent;
new(): BeforeUnloadEvent;
}
interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired, SVGURIReference {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
animatedInstanceRoot: SVGElementInstance;
instanceRoot: SVGElementInstance;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGUseElement: {
prototype: SVGUseElement;
new(): SVGUseElement;
}
interface Event {
timeStamp: number;
defaultPrevented: boolean;
isTrusted: boolean;
currentTarget: EventTarget;
cancelBubble: boolean;
target: EventTarget;
eventPhase: number;
cancelable: boolean;
type: string;
srcElement: Element;
bubbles: boolean;
initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void;
stopPropagation(): void;
stopImmediatePropagation(): void;
preventDefault(): void;
CAPTURING_PHASE: number;
AT_TARGET: number;
BUBBLING_PHASE: number;
}
declare var Event: {
prototype: Event;
new(): Event;
CAPTURING_PHASE: number;
AT_TARGET: number;
BUBBLING_PHASE: number;
}
interface ImageData {
width: number;
data: number[];
height: number;
}
declare var ImageData: {
prototype: ImageData;
new(): ImageData;
}
interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment {
/**
* Sets or retrieves the width of the object.
*/
width: any;
/**
* Sets or retrieves the alignment of the object relative to the display or table.
*/
align: string;
/**
* Sets or retrieves the number of columns in the group.
*/
span: number;
}
declare var HTMLTableColElement: {
prototype: HTMLTableColElement;
new(): HTMLTableColElement;
}
interface SVGException {
code: number;
message: string;
name: string;
toString(): string;
SVG_MATRIX_NOT_INVERTABLE: number;
SVG_WRONG_TYPE_ERR: number;
SVG_INVALID_VALUE_ERR: number;
}
declare var SVGException: {
prototype: SVGException;
new(): SVGException;
SVG_MATRIX_NOT_INVERTABLE: number;
SVG_WRONG_TYPE_ERR: number;
SVG_INVALID_VALUE_ERR: number;
}
interface SVGLinearGradientElement extends SVGGradientElement {
y1: SVGAnimatedLength;
x2: SVGAnimatedLength;
x1: SVGAnimatedLength;
y2: SVGAnimatedLength;
}
declare var SVGLinearGradientElement: {
prototype: SVGLinearGradientElement;
new(): SVGLinearGradientElement;
}
interface HTMLTableAlignment {
/**
* Sets or retrieves a value that you can use to implement your own ch functionality for the object.
*/
ch: string;
/**
* Sets or retrieves how text and other content are vertically aligned within the object that contains them.
*/
vAlign: string;
/**
* Sets or retrieves a value that you can use to implement your own chOff functionality for the object.
*/
chOff: string;
}
interface SVGAnimatedEnumeration {
animVal: number;
baseVal: number;
}
declare var SVGAnimatedEnumeration: {
prototype: SVGAnimatedEnumeration;
new(): SVGAnimatedEnumeration;
}
interface DOML2DeprecatedSizeProperty {
size: number;
}
interface HTMLUListElement extends HTMLElement, DOML2DeprecatedListSpaceReduction, DOML2DeprecatedListNumberingAndBulletStyle {
}
declare var HTMLUListElement: {
prototype: HTMLUListElement;
new(): HTMLUListElement;
}
interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
ry: SVGAnimatedLength;
rx: SVGAnimatedLength;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGRectElement: {
prototype: SVGRectElement;
new(): SVGRectElement;
}
interface ErrorEventHandler {
(event: Event, source: string, fileno: number, columnNumber: number): void;
}
interface HTMLDivElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDivElement: {
prototype: HTMLDivElement;
new(): HTMLDivElement;
}
interface DOML2DeprecatedBorderStyle {
border: string;
}
interface NamedNodeMap {
length: number;
removeNamedItemNS(namespaceURI: string, localName: string): Attr;
item(index: number): Attr;
[index: number]: Attr;
removeNamedItem(name: string): Attr;
getNamedItem(name: string): Attr;
// [name: string]: Attr;
setNamedItem(arg: Attr): Attr;
getNamedItemNS(namespaceURI: string, localName: string): Attr;
setNamedItemNS(arg: Attr): Attr;
}
declare var NamedNodeMap: {
prototype: NamedNodeMap;
new(): NamedNodeMap;
}
interface MediaList {
length: number;
mediaText: string;
deleteMedium(oldMedium: string): void;
appendMedium(newMedium: string): void;
item(index: number): string;
[index: number]: string;
toString(): string;
}
declare var MediaList: {
prototype: MediaList;
new(): MediaList;
}
interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegCurvetoQuadraticSmoothAbs: {
prototype: SVGPathSegCurvetoQuadraticSmoothAbs;
new(): SVGPathSegCurvetoQuadraticSmoothAbs;
}
interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
y: number;
x2: number;
x: number;
y2: number;
}
declare var SVGPathSegCurvetoCubicSmoothRel: {
prototype: SVGPathSegCurvetoCubicSmoothRel;
new(): SVGPathSegCurvetoCubicSmoothRel;
}
interface SVGLengthList {
numberOfItems: number;
replaceItem(newItem: SVGLength, index: number): SVGLength;
getItem(index: number): SVGLength;
clear(): void;
appendItem(newItem: SVGLength): SVGLength;
initialize(newItem: SVGLength): SVGLength;
removeItem(index: number): SVGLength;
insertItemBefore(newItem: SVGLength, index: number): SVGLength;
}
declare var SVGLengthList: {
prototype: SVGLengthList;
new(): SVGLengthList;
}
interface ProcessingInstruction extends Node {
target: string;
data: string;
}
declare var ProcessingInstruction: {
prototype: ProcessingInstruction;
new(): ProcessingInstruction;
}
interface MSWindowExtensions {
status: string;
onmouseleave: (ev: MouseEvent) => any;
screenLeft: number;
offscreenBuffering: any;
maxConnectionsPerServer: number;
onmouseenter: (ev: MouseEvent) => any;
clipboardData: DataTransfer;
defaultStatus: string;
clientInformation: Navigator;
closed: boolean;
onhelp: (ev: Event) => any;
external: External;
event: MSEventObj;
onfocusout: (ev: FocusEvent) => any;
screenTop: number;
onfocusin: (ev: FocusEvent) => any;
showModelessDialog(url?: string, argument?: any, options?: any): Window;
navigate(url: string): void;
resizeBy(x?: number, y?: number): void;
item(index: any): any;
resizeTo(x?: number, y?: number): void;
createPopup(arguments?: any): MSPopupWindow;
toStaticHTML(html: string): string;
execScript(code: string, language?: string): any;
msWriteProfilerMark(profilerMarkName: string): void;
moveTo(x?: number, y?: number): void;
moveBy(x?: number, y?: number): void;
showHelp(url: string, helpArg?: any, features?: string): void;
captureEvents(): void;
releaseEvents(): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface MSBehaviorUrnsCollection {
length: number;
item(index: number): string;
}
declare var MSBehaviorUrnsCollection: {
prototype: MSBehaviorUrnsCollection;
new(): MSBehaviorUrnsCollection;
}
interface CSSFontFaceRule extends CSSRule {
style: CSSStyleDeclaration;
}
declare var CSSFontFaceRule: {
prototype: CSSFontFaceRule;
new(): CSSFontFaceRule;
}
interface DOML2DeprecatedBackgroundStyle {
background: string;
}
interface TextEvent extends UIEvent {
inputMethod: number;
data: string;
locale: string;
initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void;
DOM_INPUT_METHOD_KEYBOARD: number;
DOM_INPUT_METHOD_DROP: number;
DOM_INPUT_METHOD_IME: number;
DOM_INPUT_METHOD_SCRIPT: number;
DOM_INPUT_METHOD_VOICE: number;
DOM_INPUT_METHOD_UNKNOWN: number;
DOM_INPUT_METHOD_PASTE: number;
DOM_INPUT_METHOD_HANDWRITING: number;
DOM_INPUT_METHOD_OPTION: number;
DOM_INPUT_METHOD_MULTIMODAL: number;
}
declare var TextEvent: {
prototype: TextEvent;
new(): TextEvent;
DOM_INPUT_METHOD_KEYBOARD: number;
DOM_INPUT_METHOD_DROP: number;
DOM_INPUT_METHOD_IME: number;
DOM_INPUT_METHOD_SCRIPT: number;
DOM_INPUT_METHOD_VOICE: number;
DOM_INPUT_METHOD_UNKNOWN: number;
DOM_INPUT_METHOD_PASTE: number;
DOM_INPUT_METHOD_HANDWRITING: number;
DOM_INPUT_METHOD_OPTION: number;
DOM_INPUT_METHOD_MULTIMODAL: number;
}
interface DocumentFragment extends Node, NodeSelector, MSEventAttachmentTarget, MSNodeExtensions {
}
declare var DocumentFragment: {
prototype: DocumentFragment;
new(): DocumentFragment;
}
interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGAnimatedPoints, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGPolylineElement: {
prototype: SVGPolylineElement;
new(): SVGPolylineElement;
}
interface SVGAnimatedPathData {
pathSegList: SVGPathSegList;
}
interface Position {
timestamp: Date;
coords: Coordinates;
}
declare var Position: {
prototype: Position;
new(): Position;
}
interface BookmarkCollection {
length: number;
item(index: number): any;
[index: number]: any;
}
declare var BookmarkCollection: {
prototype: BookmarkCollection;
new(): BookmarkCollection;
}
interface PerformanceMark extends PerformanceEntry {
}
declare var PerformanceMark: {
prototype: PerformanceMark;
new(): PerformanceMark;
}
interface CSSPageRule extends CSSRule {
pseudoClass: string;
selectorText: string;
selector: string;
style: CSSStyleDeclaration;
}
declare var CSSPageRule: {
prototype: CSSPageRule;
new(): CSSPageRule;
}
interface HTMLBRElement extends HTMLElement {
/**
* Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.
*/
clear: string;
}
declare var HTMLBRElement: {
prototype: HTMLBRElement;
new(): HTMLBRElement;
}
interface MSNavigatorExtensions {
userLanguage: string;
plugins: MSPluginsCollection;
cookieEnabled: boolean;
appCodeName: string;
cpuClass: string;
appMinorVersion: string;
connectionSpeed: number;
browserLanguage: string;
mimeTypes: MSMimeTypesCollection;
systemLanguage: string;
language: string;
javaEnabled(): boolean;
taintEnabled(): boolean;
}
interface HTMLSpanElement extends HTMLElement, MSDataBindingExtensions {
}
declare var HTMLSpanElement: {
prototype: HTMLSpanElement;
new(): HTMLSpanElement;
}
interface HTMLHeadElement extends HTMLElement {
profile: string;
}
declare var HTMLHeadElement: {
prototype: HTMLHeadElement;
new(): HTMLHeadElement;
}
interface HTMLHeadingElement extends HTMLElement, DOML2DeprecatedTextFlowControl {
/**
* Sets or retrieves a value that indicates the table alignment.
*/
align: string;
}
declare var HTMLHeadingElement: {
prototype: HTMLHeadingElement;
new(): HTMLHeadingElement;
}
interface HTMLFormElement extends HTMLElement, MSHTMLCollectionExtensions {
/**
* Sets or retrieves the number of objects in a collection.
*/
length: number;
/**
* Sets or retrieves the window or frame at which to target content.
*/
target: string;
/**
* Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form.
*/
acceptCharset: string;
/**
* Sets or retrieves the encoding type for the form.
*/
enctype: string;
/**
* Retrieves a collection, in source order, of all controls in a given form.
*/
elements: HTMLCollection;
/**
* Sets or retrieves the URL to which the form content is sent for processing.
*/
action: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves how to send the form data to the server.
*/
method: string;
/**
* Sets or retrieves the MIME encoding for the form.
*/
encoding: string;
/**
* Specifies whether autocomplete is applied to an editable text field.
*/
autocomplete: string;
/**
* Designates a form that is not validated when submitted.
*/
noValidate: boolean;
/**
* Fires when the user resets a form.
*/
reset(): void;
/**
* Retrieves a form object or an object from an elements collection.
* @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
* @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
*/
item(name?: any, index?: any): any;
/**
* Fires when a FORM is about to be submitted.
*/
submit(): void;
/**
* Retrieves a form object or an object from an elements collection.
*/
namedItem(name: string): any;
[name: string]: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
}
declare var HTMLFormElement: {
prototype: HTMLFormElement;
new(): HTMLFormElement;
}
interface SVGZoomAndPan {
zoomAndPan: number;
SVG_ZOOMANDPAN_MAGNIFY: number;
SVG_ZOOMANDPAN_UNKNOWN: number;
SVG_ZOOMANDPAN_DISABLE: number;
}
declare var SVGZoomAndPan: SVGZoomAndPan;
interface HTMLMediaElement extends HTMLElement {
/**
* Gets the earliest possible position, in seconds, that the playback can begin.
*/
initialTime: number;
/**
* Gets TimeRanges for the current media resource that has been played.
*/
played: TimeRanges;
/**
* Gets the address or URL of the current media resource that is selected by IHTMLMediaElement.
*/
currentSrc: string;
readyState: any;
/**
* The autobuffer element is not supported by Internet Explorer 9. Use the preload element instead.
*/
autobuffer: boolean;
/**
* Gets or sets a flag to specify whether playback should restart after it completes.
*/
loop: boolean;
/**
* Gets information about whether the playback has ended or not.
*/
ended: boolean;
/**
* Gets a collection of buffered time ranges.
*/
buffered: TimeRanges;
/**
* Returns an object representing the current error state of the audio or video element.
*/
error: MediaError;
/**
* Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked.
*/
seekable: TimeRanges;
/**
* Gets or sets a value that indicates whether to start playing the media automatically.
*/
autoplay: boolean;
/**
* Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player).
*/
controls: boolean;
/**
* Gets or sets the volume level for audio portions of the media element.
*/
volume: number;
/**
* The address or URL of the a media resource that is to be considered.
*/
src: string;
/**
* Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource.
*/
playbackRate: number;
/**
* Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming.
*/
duration: number;
/**
* Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted.
*/
muted: boolean;
/**
* Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource.
*/
defaultPlaybackRate: number;
/**
* Gets a flag that specifies whether playback is paused.
*/
paused: boolean;
/**
* Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource.
*/
seeking: boolean;
/**
* Gets or sets the current playback position, in seconds.
*/
currentTime: number;
/**
* Gets or sets the current playback position, in seconds.
*/
preload: string;
/**
* Gets the current network activity for the element.
*/
networkState: number;
/**
* Specifies the purpose of the audio or video media, such as background audio or alerts.
*/
msAudioCategory: string;
/**
* Specifies whether or not to enable low-latency playback on the media element.
*/
msRealTime: boolean;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
textTracks: TextTrackList;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
/**
* Returns an AudioTrackList object with the audio tracks for a given video element.
*/
audioTracks: AudioTrackList;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
/**
* Specifies the output device id that the audio will be sent to.
*/
msAudioDeviceType: string;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;
/**
* Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element.
*/
msKeys: MSMediaKeys;
msGraphicsTrustStatus: MSGraphicsTrust;
/**
* Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not.
*/
pause(): void;
/**
* Loads and starts playback of a media resource.
*/
play(): void;
/**
* Fires immediately after the client loads the object.
*/
load(): void;
/**
* Returns a string that specifies whether the client can play a given media resource type.
*/
canPlayType(type: string): string;
/**
* Clears all effects from the media pipeline.
*/
msClearEffects(): void;
/**
* Specifies the media protection manager for a given media pipeline.
*/
msSetMediaProtectionManager(mediaProtectionManager?: any): void;
/**
* Inserts the specified audio effect into media pipeline.
*/
msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
msSetMediaKeys(mediaKeys: MSMediaKeys): void;
addTextTrack(kind: string, label?: string, language?: string): TextTrack;
HAVE_METADATA: number;
HAVE_CURRENT_DATA: number;
HAVE_NOTHING: number;
NETWORK_NO_SOURCE: number;
HAVE_ENOUGH_DATA: number;
NETWORK_EMPTY: number;
NETWORK_LOADING: number;
NETWORK_IDLE: number;
HAVE_FUTURE_DATA: number;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLMediaElement: {
prototype: HTMLMediaElement;
new(): HTMLMediaElement;
HAVE_METADATA: number;
HAVE_CURRENT_DATA: number;
HAVE_NOTHING: number;
NETWORK_NO_SOURCE: number;
HAVE_ENOUGH_DATA: number;
NETWORK_EMPTY: number;
NETWORK_LOADING: number;
NETWORK_IDLE: number;
HAVE_FUTURE_DATA: number;
}
interface ElementCSSInlineStyle {
runtimeStyle: MSStyleCSSProperties;
currentStyle: MSCurrentStyleCSSProperties;
doScroll(component?: any): void;
componentFromPoint(x: number, y: number): string;
}
interface DOMParser {
parseFromString(source: string, mimeType: string): Document;
}
declare var DOMParser: {
prototype: DOMParser;
new(): DOMParser;
}
interface MSMimeTypesCollection {
length: number;
}
declare var MSMimeTypesCollection: {
prototype: MSMimeTypesCollection;
new(): MSMimeTypesCollection;
}
interface StyleSheet {
disabled: boolean;
ownerNode: Node;
parentStyleSheet: StyleSheet;
href: string;
media: MediaList;
type: string;
title: string;
}
declare var StyleSheet: {
prototype: StyleSheet;
new(): StyleSheet;
}
interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference {
startOffset: SVGAnimatedLength;
method: SVGAnimatedEnumeration;
spacing: SVGAnimatedEnumeration;
TEXTPATH_SPACINGTYPE_EXACT: number;
TEXTPATH_METHODTYPE_STRETCH: number;
TEXTPATH_SPACINGTYPE_AUTO: number;
TEXTPATH_SPACINGTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_ALIGN: number;
}
declare var SVGTextPathElement: {
prototype: SVGTextPathElement;
new(): SVGTextPathElement;
TEXTPATH_SPACINGTYPE_EXACT: number;
TEXTPATH_METHODTYPE_STRETCH: number;
TEXTPATH_SPACINGTYPE_AUTO: number;
TEXTPATH_SPACINGTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_UNKNOWN: number;
TEXTPATH_METHODTYPE_ALIGN: number;
}
interface HTMLDTElement extends HTMLElement {
/**
* Sets or retrieves whether the browser automatically performs wordwrap.
*/
noWrap: boolean;
}
declare var HTMLDTElement: {
prototype: HTMLDTElement;
new(): HTMLDTElement;
}
interface NodeList {
length: number;
item(index: number): Node;
[index: number]: Node;
}
declare var NodeList: {
prototype: NodeList;
new(): NodeList;
}
interface XMLSerializer {
serializeToString(target: Node): string;
}
declare var XMLSerializer: {
prototype: XMLSerializer;
new(): XMLSerializer;
}
interface PerformanceMeasure extends PerformanceEntry {
}
declare var PerformanceMeasure: {
prototype: PerformanceMeasure;
new(): PerformanceMeasure;
}
interface SVGGradientElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGExternalResourcesRequired, SVGURIReference {
spreadMethod: SVGAnimatedEnumeration;
gradientTransform: SVGAnimatedTransformList;
gradientUnits: SVGAnimatedEnumeration;
SVG_SPREADMETHOD_REFLECT: number;
SVG_SPREADMETHOD_PAD: number;
SVG_SPREADMETHOD_UNKNOWN: number;
SVG_SPREADMETHOD_REPEAT: number;
}
declare var SVGGradientElement: {
prototype: SVGGradientElement;
new(): SVGGradientElement;
SVG_SPREADMETHOD_REFLECT: number;
SVG_SPREADMETHOD_PAD: number;
SVG_SPREADMETHOD_UNKNOWN: number;
SVG_SPREADMETHOD_REPEAT: number;
}
interface NodeFilter {
acceptNode(n: Node): number;
SHOW_ENTITY_REFERENCE: number;
SHOW_NOTATION: number;
SHOW_ENTITY: number;
SHOW_DOCUMENT: number;
SHOW_PROCESSING_INSTRUCTION: number;
FILTER_REJECT: number;
SHOW_CDATA_SECTION: number;
FILTER_ACCEPT: number;
SHOW_ALL: number;
SHOW_DOCUMENT_TYPE: number;
SHOW_TEXT: number;
SHOW_ELEMENT: number;
SHOW_COMMENT: number;
FILTER_SKIP: number;
SHOW_ATTRIBUTE: number;
SHOW_DOCUMENT_FRAGMENT: number;
}
declare var NodeFilter: NodeFilter;
interface SVGNumberList {
numberOfItems: number;
replaceItem(newItem: SVGNumber, index: number): SVGNumber;
getItem(index: number): SVGNumber;
clear(): void;
appendItem(newItem: SVGNumber): SVGNumber;
initialize(newItem: SVGNumber): SVGNumber;
removeItem(index: number): SVGNumber;
insertItemBefore(newItem: SVGNumber, index: number): SVGNumber;
}
declare var SVGNumberList: {
prototype: SVGNumberList;
new(): SVGNumberList;
}
interface MediaError {
code: number;
msExtendedCode: number;
MEDIA_ERR_ABORTED: number;
MEDIA_ERR_NETWORK: number;
MEDIA_ERR_SRC_NOT_SUPPORTED: number;
MEDIA_ERR_DECODE: number;
MS_MEDIA_ERR_ENCRYPTED: number;
}
declare var MediaError: {
prototype: MediaError;
new(): MediaError;
MEDIA_ERR_ABORTED: number;
MEDIA_ERR_NETWORK: number;
MEDIA_ERR_SRC_NOT_SUPPORTED: number;
MEDIA_ERR_DECODE: number;
MS_MEDIA_ERR_ENCRYPTED: number;
}
interface HTMLFieldSetElement extends HTMLElement {
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLFieldSetElement: {
prototype: HTMLFieldSetElement;
new(): HTMLFieldSetElement;
}
interface HTMLBGSoundElement extends HTMLElement {
/**
* Sets or gets the value indicating how the volume of the background sound is divided between the left speaker and the right speaker.
*/
balance: any;
/**
* Sets or gets the volume setting for the sound.
*/
volume: any;
/**
* Sets or gets the URL of a sound to play.
*/
src: string;
/**
* Sets or retrieves the number of times a sound or video clip will loop when activated.
*/
loop: number;
}
declare var HTMLBGSoundElement: {
prototype: HTMLBGSoundElement;
new(): HTMLBGSoundElement;
}
interface Comment extends CharacterData {
text: string;
}
declare var Comment: {
prototype: Comment;
new(): Comment;
}
interface PerformanceResourceTiming extends PerformanceEntry {
redirectStart: number;
redirectEnd: number;
domainLookupEnd: number;
responseStart: number;
domainLookupStart: number;
fetchStart: number;
requestStart: number;
connectEnd: number;
connectStart: number;
initiatorType: string;
responseEnd: number;
}
declare var PerformanceResourceTiming: {
prototype: PerformanceResourceTiming;
new(): PerformanceResourceTiming;
}
interface CanvasPattern {
}
declare var CanvasPattern: {
prototype: CanvasPattern;
new(): CanvasPattern;
}
interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
/**
* Sets or retrieves the width of the object.
*/
width: number;
/**
* Sets or retrieves how the object is aligned with adjacent text.
*/
align: string;
/**
* Sets or retrieves whether the horizontal rule is drawn with 3-D shading.
*/
noShade: boolean;
}
declare var HTMLHRElement: {
prototype: HTMLHRElement;
new(): HTMLHRElement;
}
interface HTMLObjectElement extends HTMLElement, GetSVGDocument, DOML2DeprecatedMarginStyle, DOML2DeprecatedBorderStyle, DOML2DeprecatedAlignmentStyle, MSDataBindingExtensions, MSDataBindingRecordSetExtensions {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Sets or retrieves the Internet media type for the code associated with the object.
*/
codeType: string;
/**
* Retrieves the contained object.
*/
object: any;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the URL of the file containing the compiled Java class.
*/
code: string;
/**
* Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
*/
archive: string;
/**
* Sets or retrieves a message to be displayed while an object is loading.
*/
standby: string;
/**
* Sets or retrieves a text alternative to the graphic.
*/
alt: string;
/**
* Sets or retrieves the class identifier for the object.
*/
classid: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
/**
* Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
*/
useMap: string;
/**
* Sets or retrieves the URL that references the data of the object.
*/
data: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Retrieves the document object of the page or frame.
*/
contentDocument: Document;
/**
* Gets or sets the optional alternative HTML script to execute if the object fails to load.
*/
altHtml: string;
/**
* Sets or retrieves the URL of the component.
*/
codeBase: string;
declare: boolean;
/**
* Sets or retrieves the MIME type of the object.
*/
type: string;
/**
* Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
*/
BaseHref: string;
/**
* Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
*/
validationMessage: string;
/**
* Returns a ValidityState object that represents the validity states of an element.
*/
validity: ValidityState;
/**
* Returns whether an element will successfully validate based on forms validation rules and constraints.
*/
willValidate: boolean;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
readyState: number;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
/**
* Returns whether a form will validate when it is submitted, without having to submit it.
*/
checkValidity(): boolean;
/**
* Sets a custom error message that is displayed when a form is submitted.
* @param error Sets a custom error message that is displayed when a form is submitted.
*/
setCustomValidity(error: string): void;
}
declare var HTMLObjectElement: {
prototype: HTMLObjectElement;
new(): HTMLObjectElement;
}
interface HTMLEmbedElement extends HTMLElement, GetSVGDocument {
/**
* Sets or retrieves the width of the object.
*/
width: string;
/**
* Retrieves the palette used for the embedded document.
*/
palette: string;
/**
* Sets or retrieves a URL to be loaded by the object.
*/
src: string;
/**
* Sets or retrieves the name of the object.
*/
name: string;
hidden: string;
/**
* Retrieves the URL of the plug-in used to view an embedded document.
*/
pluginspage: string;
/**
* Sets or retrieves the height of the object.
*/
height: string;
/**
* Sets or retrieves the height and width units of the embed object.
*/
units: string;
/**
* Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
*/
msPlayToPreferredSourceUri: string;
/**
* Gets or sets the primary DLNA PlayTo device.
*/
msPlayToPrimary: boolean;
/**
* Gets or sets whether the DLNA PlayTo device is available.
*/
msPlayToDisabled: boolean;
readyState: string;
/**
* Gets the source associated with the media element for use by the PlayToManager.
*/
msPlayToSource: any;
}
declare var HTMLEmbedElement: {
prototype: HTMLEmbedElement;
new(): HTMLEmbedElement;
}
interface StorageEvent extends Event {
oldValue: any;
newValue: any;
url: string;
storageArea: Storage;
key: string;
initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void;
}
declare var StorageEvent: {
prototype: StorageEvent;
new(): StorageEvent;
}
interface CharacterData extends Node {
length: number;
data: string;
deleteData(offset: number, count: number): void;
replaceData(offset: number, count: number, arg: string): void;
appendData(arg: string): void;
insertData(offset: number, arg: string): void;
substringData(offset: number, count: number): string;
}
declare var CharacterData: {
prototype: CharacterData;
new(): CharacterData;
}
interface HTMLOptGroupElement extends HTMLElement, MSDataBindingExtensions {
/**
* Sets or retrieves the ordinal position of an option in a list box.
*/
index: number;
/**
* Sets or retrieves the status of an option.
*/
defaultSelected: boolean;
/**
* Sets or retrieves the text string specified by the option tag.
*/
text: string;
/**
* Sets or retrieves the value which is returned to the server when the form control is submitted.
*/
value: string;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves a value that you can use to implement your own label functionality for the object.
*/
label: string;
/**
* Sets or retrieves whether the option in the list box is the default item.
*/
selected: boolean;
}
declare var HTMLOptGroupElement: {
prototype: HTMLOptGroupElement;
new(): HTMLOptGroupElement;
}
interface HTMLIsIndexElement extends HTMLElement {
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
/**
* Sets or retrieves the URL to which the form content is sent for processing.
*/
action: string;
prompt: string;
}
declare var HTMLIsIndexElement: {
prototype: HTMLIsIndexElement;
new(): HTMLIsIndexElement;
}
interface SVGPathSegLinetoRel extends SVGPathSeg {
y: number;
x: number;
}
declare var SVGPathSegLinetoRel: {
prototype: SVGPathSegLinetoRel;
new(): SVGPathSegLinetoRel;
}
interface DOMException {
code: number;
message: string;
name: string;
toString(): string;
HIERARCHY_REQUEST_ERR: number;
NO_MODIFICATION_ALLOWED_ERR: number;
INVALID_MODIFICATION_ERR: number;
NAMESPACE_ERR: number;
INVALID_CHARACTER_ERR: number;
TYPE_MISMATCH_ERR: number;
ABORT_ERR: number;
INVALID_STATE_ERR: number;
SECURITY_ERR: number;
NETWORK_ERR: number;
WRONG_DOCUMENT_ERR: number;
QUOTA_EXCEEDED_ERR: number;
INDEX_SIZE_ERR: number;
DOMSTRING_SIZE_ERR: number;
SYNTAX_ERR: number;
SERIALIZE_ERR: number;
VALIDATION_ERR: number;
NOT_FOUND_ERR: number;
URL_MISMATCH_ERR: number;
PARSE_ERR: number;
NO_DATA_ALLOWED_ERR: number;
NOT_SUPPORTED_ERR: number;
INVALID_ACCESS_ERR: number;
INUSE_ATTRIBUTE_ERR: number;
INVALID_NODE_TYPE_ERR: number;
DATA_CLONE_ERR: number;
TIMEOUT_ERR: number;
}
declare var DOMException: {
prototype: DOMException;
new(): DOMException;
HIERARCHY_REQUEST_ERR: number;
NO_MODIFICATION_ALLOWED_ERR: number;
INVALID_MODIFICATION_ERR: number;
NAMESPACE_ERR: number;
INVALID_CHARACTER_ERR: number;
TYPE_MISMATCH_ERR: number;
ABORT_ERR: number;
INVALID_STATE_ERR: number;
SECURITY_ERR: number;
NETWORK_ERR: number;
WRONG_DOCUMENT_ERR: number;
QUOTA_EXCEEDED_ERR: number;
INDEX_SIZE_ERR: number;
DOMSTRING_SIZE_ERR: number;
SYNTAX_ERR: number;
SERIALIZE_ERR: number;
VALIDATION_ERR: number;
NOT_FOUND_ERR: number;
URL_MISMATCH_ERR: number;
PARSE_ERR: number;
NO_DATA_ALLOWED_ERR: number;
NOT_SUPPORTED_ERR: number;
INVALID_ACCESS_ERR: number;
INUSE_ATTRIBUTE_ERR: number;
INVALID_NODE_TYPE_ERR: number;
DATA_CLONE_ERR: number;
TIMEOUT_ERR: number;
}
interface SVGAnimatedBoolean {
animVal: boolean;
baseVal: boolean;
}
declare var SVGAnimatedBoolean: {
prototype: SVGAnimatedBoolean;
new(): SVGAnimatedBoolean;
}
interface MSCompatibleInfoCollection {
length: number;
item(index: number): MSCompatibleInfo;
}
declare var MSCompatibleInfoCollection: {
prototype: MSCompatibleInfoCollection;
new(): MSCompatibleInfoCollection;
}
interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
}
declare var SVGSwitchElement: {
prototype: SVGSwitchElement;
new(): SVGSwitchElement;
}
interface SVGPreserveAspectRatio {
align: number;
meetOrSlice: number;
SVG_PRESERVEASPECTRATIO_NONE: number;
SVG_PRESERVEASPECTRATIO_XMINYMID: number;
SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
SVG_MEETORSLICE_UNKNOWN: number;
SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
SVG_MEETORSLICE_MEET: number;
SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
SVG_MEETORSLICE_SLICE: number;
SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
}
declare var SVGPreserveAspectRatio: {
prototype: SVGPreserveAspectRatio;
new(): SVGPreserveAspectRatio;
SVG_PRESERVEASPECTRATIO_NONE: number;
SVG_PRESERVEASPECTRATIO_XMINYMID: number;
SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
SVG_MEETORSLICE_UNKNOWN: number;
SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
SVG_MEETORSLICE_MEET: number;
SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
SVG_MEETORSLICE_SLICE: number;
SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
}
interface Attr extends Node {
expando: boolean;
specified: boolean;
ownerElement: Element;
value: string;
name: string;
}
declare var Attr: {
prototype: Attr;
new(): Attr;
}
interface PerformanceNavigation {
redirectCount: number;
type: number;
toJSON(): any;
TYPE_RELOAD: number;
TYPE_RESERVED: number;
TYPE_BACK_FORWARD: number;
TYPE_NAVIGATE: number;
}
declare var PerformanceNavigation: {
prototype: PerformanceNavigation;
new(): PerformanceNavigation;
TYPE_RELOAD: number;
TYPE_RESERVED: number;
TYPE_BACK_FORWARD: number;
TYPE_NAVIGATE: number;
}
interface SVGStopElement extends SVGElement, SVGStylable {
offset: SVGAnimatedNumber;
}
declare var SVGStopElement: {
prototype: SVGStopElement;
new(): SVGStopElement;
}
interface PositionCallback {
(position: Position): void;
}
interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGFitToViewBox, SVGExternalResourcesRequired {
}
declare var SVGSymbolElement: {
prototype: SVGSymbolElement;
new(): SVGSymbolElement;
}
interface SVGElementInstanceList {
length: number;
item(index: number): SVGElementInstance;
}
declare var SVGElementInstanceList: {
prototype: SVGElementInstanceList;
new(): SVGElementInstanceList;
}
interface CSSRuleList {
length: number;
item(index: number): CSSRule;
[index: number]: CSSRule;
}
declare var CSSRuleList: {
prototype: CSSRuleList;
new(): CSSRuleList;
}
interface MSDataBindingRecordSetExtensions {
recordset: any;
namedRecordset(dataMember: string, hierarchy?: any): any;
}
interface LinkStyle {
styleSheet: StyleSheet;
sheet: StyleSheet;
}
interface HTMLVideoElement extends HTMLMediaElement {
/**
* Gets or sets the width of the video element.
*/
width: number;
/**
* Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known.
*/
videoWidth: number;
/**
* Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known.
*/
videoHeight: number;
/**
* Gets or sets the height of the video element.
*/
height: number;
/**
* Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available.
*/
poster: string;
msIsStereo3D: boolean;
msStereo3DPackingMode: string;
onMSVideoOptimalLayoutChanged: (ev: any) => any;
onMSVideoFrameStepCompleted: (ev: any) => any;
msStereo3DRenderMode: string;
msIsLayoutOptimalForPlayback: boolean;
msHorizontalMirror: boolean;
onMSVideoFormatChanged: (ev: any) => any;
msZoom: boolean;
msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void;
msFrameStep(forward: boolean): void;
getVideoPlaybackQuality(): VideoPlaybackQuality;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgotpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mslostpointercapture", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "move", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "datasetchanged", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsdelete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "losecapture", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "controlselect", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "layoutcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforeupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "filterchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "datasetcomplete", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "errorupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cellchange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowexit", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "rowsinserted", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "propertychange", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "moveend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "beforeeditfocus", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "afterupdate", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resizeend", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "dataavailable", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "movestart", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "rowenter", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "mscontentzoom", listener: (ev: MSEventObj) => any, useCapture?: boolean): void;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "msmanipulationstatechanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "MSVideoFormatChanged", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var HTMLVideoElement: {
prototype: HTMLVideoElement;
new(): HTMLVideoElement;
}
interface ClientRectList {
length: number;
item(index: number): ClientRect;
[index: number]: ClientRect;
}
declare var ClientRectList: {
prototype: ClientRectList;
new(): ClientRectList;
}
interface SVGMaskElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGTests, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
maskUnits: SVGAnimatedEnumeration;
maskContentUnits: SVGAnimatedEnumeration;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
}
declare var SVGMaskElement: {
prototype: SVGMaskElement;
new(): SVGMaskElement;
}
interface External {
}
declare var External: {
prototype: External;
new(): External;
}
interface MSGestureEvent extends UIEvent {
offsetY: number;
translationY: number;
velocityExpansion: number;
velocityY: number;
velocityAngular: number;
translationX: number;
velocityX: number;
hwTimestamp: number;
offsetX: number;
screenX: number;
rotation: number;
expansion: number;
clientY: number;
screenY: number;
scale: number;
gestureObject: any;
clientX: number;
initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void;
MSGESTURE_FLAG_BEGIN: number;
MSGESTURE_FLAG_END: number;
MSGESTURE_FLAG_CANCEL: number;
MSGESTURE_FLAG_INERTIA: number;
MSGESTURE_FLAG_NONE: number;
}
declare var MSGestureEvent: {
prototype: MSGestureEvent;
new(): MSGestureEvent;
MSGESTURE_FLAG_BEGIN: number;
MSGESTURE_FLAG_END: number;
MSGESTURE_FLAG_CANCEL: number;
MSGESTURE_FLAG_INERTIA: number;
MSGESTURE_FLAG_NONE: number;
}
interface ErrorEvent extends Event {
colno: number;
filename: string;
error: any;
lineno: number;
message: string;
initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void;
}
declare var ErrorEvent: {
prototype: ErrorEvent;
new(): ErrorEvent;
}
interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
filterResX: SVGAnimatedInteger;
filterUnits: SVGAnimatedEnumeration;
primitiveUnits: SVGAnimatedEnumeration;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
filterResY: SVGAnimatedInteger;
setFilterRes(filterResX: number, filterResY: number): void;
}
declare var SVGFilterElement: {
prototype: SVGFilterElement;
new(): SVGFilterElement;
}
interface TrackEvent extends Event {
track: any;
}
declare var TrackEvent: {
prototype: TrackEvent;
new(): TrackEvent;
}
interface SVGFEMergeNodeElement extends SVGElement {
in1: SVGAnimatedString;
}
declare var SVGFEMergeNodeElement: {
prototype: SVGFEMergeNodeElement;
new(): SVGFEMergeNodeElement;
}
interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
}
declare var SVGFEFloodElement: {
prototype: SVGFEFloodElement;
new(): SVGFEFloodElement;
}
interface MSGesture {
target: Element;
addPointer(pointerId: number): void;
stop(): void;
}
declare var MSGesture: {
prototype: MSGesture;
new(): MSGesture;
}
interface TextTrackCue extends EventTarget {
onenter: (ev: Event) => any;
track: TextTrack;
endTime: number;
text: string;
pauseOnExit: boolean;
id: string;
startTime: number;
onexit: (ev: Event) => any;
getCueAsHTML(): DocumentFragment;
addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrackCue: {
prototype: TextTrackCue;
new(startTime: number, endTime: number, text: string): TextTrackCue;
}
interface MSStreamReader extends MSBaseReader {
error: DOMError;
readAsArrayBuffer(stream: MSStream, size?: number): void;
readAsBlob(stream: MSStream, size?: number): void;
readAsDataURL(stream: MSStream, size?: number): void;
readAsText(stream: MSStream, encoding?: string, size?: number): void;
}
declare var MSStreamReader: {
prototype: MSStreamReader;
new(): MSStreamReader;
}
interface DOMTokenList {
length: number;
contains(token: string): boolean;
remove(token: string): void;
toggle(token: string): boolean;
add(token: string): void;
item(index: number): string;
[index: number]: string;
toString(): string;
}
declare var DOMTokenList: {
prototype: DOMTokenList;
new(): DOMTokenList;
}
interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncAElement: {
prototype: SVGFEFuncAElement;
new(): SVGFEFuncAElement;
}
interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
}
declare var SVGFETileElement: {
prototype: SVGFETileElement;
new(): SVGFETileElement;
}
interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in2: SVGAnimatedString;
mode: SVGAnimatedEnumeration;
in1: SVGAnimatedString;
SVG_FEBLEND_MODE_DARKEN: number;
SVG_FEBLEND_MODE_UNKNOWN: number;
SVG_FEBLEND_MODE_MULTIPLY: number;
SVG_FEBLEND_MODE_NORMAL: number;
SVG_FEBLEND_MODE_SCREEN: number;
SVG_FEBLEND_MODE_LIGHTEN: number;
}
declare var SVGFEBlendElement: {
prototype: SVGFEBlendElement;
new(): SVGFEBlendElement;
SVG_FEBLEND_MODE_DARKEN: number;
SVG_FEBLEND_MODE_UNKNOWN: number;
SVG_FEBLEND_MODE_MULTIPLY: number;
SVG_FEBLEND_MODE_NORMAL: number;
SVG_FEBLEND_MODE_SCREEN: number;
SVG_FEBLEND_MODE_LIGHTEN: number;
}
interface MessageChannel {
port2: MessagePort;
port1: MessagePort;
}
declare var MessageChannel: {
prototype: MessageChannel;
new(): MessageChannel;
}
interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
}
declare var SVGFEMergeElement: {
prototype: SVGFEMergeElement;
new(): SVGFEMergeElement;
}
interface TransitionEvent extends Event {
propertyName: string;
elapsedTime: number;
initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void;
}
declare var TransitionEvent: {
prototype: TransitionEvent;
new(): TransitionEvent;
}
interface MediaQueryList {
matches: boolean;
media: string;
addListener(listener: MediaQueryListListener): void;
removeListener(listener: MediaQueryListListener): void;
}
declare var MediaQueryList: {
prototype: MediaQueryList;
new(): MediaQueryList;
}
interface DOMError {
name: string;
toString(): string;
}
declare var DOMError: {
prototype: DOMError;
new(): DOMError;
}
interface CloseEvent extends Event {
wasClean: boolean;
reason: string;
code: number;
initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void;
}
declare var CloseEvent: {
prototype: CloseEvent;
new(): CloseEvent;
}
interface WebSocket extends EventTarget {
protocol: string;
readyState: number;
bufferedAmount: number;
onopen: (ev: Event) => any;
extensions: string;
onmessage: (ev: MessageEvent) => any;
onclose: (ev: CloseEvent) => any;
onerror: (ev: ErrorEvent) => any;
binaryType: string;
url: string;
close(code?: number, reason?: string): void;
send(data: any): void;
OPEN: number;
CLOSING: number;
CONNECTING: number;
CLOSED: number;
addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var WebSocket: {
prototype: WebSocket;
new(url: string, protocols?: string): WebSocket;
new(url: string, protocols?: string[]): WebSocket;
OPEN: number;
CLOSING: number;
CONNECTING: number;
CLOSED: number;
}
interface SVGFEPointLightElement extends SVGElement {
y: SVGAnimatedNumber;
x: SVGAnimatedNumber;
z: SVGAnimatedNumber;
}
declare var SVGFEPointLightElement: {
prototype: SVGFEPointLightElement;
new(): SVGFEPointLightElement;
}
interface ProgressEvent extends Event {
loaded: number;
lengthComputable: boolean;
total: number;
initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void;
}
declare var ProgressEvent: {
prototype: ProgressEvent;
new(): ProgressEvent;
}
interface IDBObjectStore {
indexNames: DOMStringList;
name: string;
transaction: IDBTransaction;
keyPath: string;
count(key?: any): IDBRequest;
add(value: any, key?: any): IDBRequest;
clear(): IDBRequest;
createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex;
put(value: any, key?: any): IDBRequest;
openCursor(range?: any, direction?: string): IDBRequest;
deleteIndex(indexName: string): void;
index(name: string): IDBIndex;
get(key: any): IDBRequest;
delete(key: any): IDBRequest;
}
declare var IDBObjectStore: {
prototype: IDBObjectStore;
new(): IDBObjectStore;
}
interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
stdDeviationX: SVGAnimatedNumber;
in1: SVGAnimatedString;
stdDeviationY: SVGAnimatedNumber;
setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;
}
declare var SVGFEGaussianBlurElement: {
prototype: SVGFEGaussianBlurElement;
new(): SVGFEGaussianBlurElement;
}
interface SVGFilterPrimitiveStandardAttributes extends SVGStylable {
y: SVGAnimatedLength;
width: SVGAnimatedLength;
x: SVGAnimatedLength;
height: SVGAnimatedLength;
result: SVGAnimatedString;
}
interface IDBVersionChangeEvent extends Event {
newVersion: number;
oldVersion: number;
}
declare var IDBVersionChangeEvent: {
prototype: IDBVersionChangeEvent;
new(): IDBVersionChangeEvent;
}
interface IDBIndex {
unique: boolean;
name: string;
keyPath: string;
objectStore: IDBObjectStore;
count(key?: any): IDBRequest;
getKey(key: any): IDBRequest;
openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
get(key: any): IDBRequest;
openCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
}
declare var IDBIndex: {
prototype: IDBIndex;
new(): IDBIndex;
}
interface FileList {
length: number;
item(index: number): File;
[index: number]: File;
}
declare var FileList: {
prototype: FileList;
new(): FileList;
}
interface IDBCursor {
source: any;
direction: string;
key: any;
primaryKey: any;
advance(count: number): void;
delete(): IDBRequest;
continue(key?: any): void;
update(value: any): IDBRequest;
PREV: string;
PREV_NO_DUPLICATE: string;
NEXT: string;
NEXT_NO_DUPLICATE: string;
}
declare var IDBCursor: {
prototype: IDBCursor;
new(): IDBCursor;
PREV: string;
PREV_NO_DUPLICATE: string;
NEXT: string;
NEXT_NO_DUPLICATE: string;
}
interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
kernelUnitLengthY: SVGAnimatedNumber;
surfaceScale: SVGAnimatedNumber;
specularExponent: SVGAnimatedNumber;
in1: SVGAnimatedString;
kernelUnitLengthX: SVGAnimatedNumber;
specularConstant: SVGAnimatedNumber;
}
declare var SVGFESpecularLightingElement: {
prototype: SVGFESpecularLightingElement;
new(): SVGFESpecularLightingElement;
}
interface File extends Blob {
lastModifiedDate: any;
name: string;
}
declare var File: {
prototype: File;
new(): File;
}
interface URL {
revokeObjectURL(url: string): void;
createObjectURL(object: any, options?: ObjectURLOptions): string;
}
declare var URL: URL;
interface IDBCursorWithValue extends IDBCursor {
value: any;
}
declare var IDBCursorWithValue: {
prototype: IDBCursorWithValue;
new(): IDBCursorWithValue;
}
interface XMLHttpRequestEventTarget extends EventTarget {
onprogress: (ev: ProgressEvent) => any;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
ontimeout: (ev: Event) => any;
onabort: (ev: UIEvent) => any;
onloadstart: (ev: Event) => any;
onloadend: (ev: ProgressEvent) => any;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "timeout", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var XMLHttpRequestEventTarget: {
prototype: XMLHttpRequestEventTarget;
new(): XMLHttpRequestEventTarget;
}
interface IDBEnvironment {
msIndexedDB: IDBFactory;
indexedDB: IDBFactory;
}
interface AudioTrackList extends EventTarget {
length: number;
onchange: (ev: Event) => any;
onaddtrack: (ev: TrackEvent) => any;
onremovetrack: (ev: any /*PluginArray*/) => any;
getTrackById(id: string): AudioTrack;
item(index: number): AudioTrack;
[index: number]: AudioTrack;
addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
addEventListener(type: "removetrack", listener: (ev: any /*PluginArray*/) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var AudioTrackList: {
prototype: AudioTrackList;
new(): AudioTrackList;
}
interface MSBaseReader extends EventTarget {
onprogress: (ev: ProgressEvent) => any;
readyState: number;
onabort: (ev: UIEvent) => any;
onloadend: (ev: ProgressEvent) => any;
onerror: (ev: ErrorEvent) => any;
onload: (ev: Event) => any;
onloadstart: (ev: Event) => any;
result: any;
abort(): void;
LOADING: number;
EMPTY: number;
DONE: number;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
operator: SVGAnimatedEnumeration;
radiusX: SVGAnimatedNumber;
radiusY: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
SVG_MORPHOLOGY_OPERATOR_ERODE: number;
SVG_MORPHOLOGY_OPERATOR_DILATE: number;
}
declare var SVGFEMorphologyElement: {
prototype: SVGFEMorphologyElement;
new(): SVGFEMorphologyElement;
SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
SVG_MORPHOLOGY_OPERATOR_ERODE: number;
SVG_MORPHOLOGY_OPERATOR_DILATE: number;
}
interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncRElement: {
prototype: SVGFEFuncRElement;
new(): SVGFEFuncRElement;
}
interface WindowTimersExtension {
msSetImmediate(expression: any, ...args: any[]): number;
clearImmediate(handle: number): void;
msClearImmediate(handle: number): void;
setImmediate(expression: any, ...args: any[]): number;
}
interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in2: SVGAnimatedString;
xChannelSelector: SVGAnimatedEnumeration;
yChannelSelector: SVGAnimatedEnumeration;
scale: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_CHANNEL_B: number;
SVG_CHANNEL_R: number;
SVG_CHANNEL_G: number;
SVG_CHANNEL_UNKNOWN: number;
SVG_CHANNEL_A: number;
}
declare var SVGFEDisplacementMapElement: {
prototype: SVGFEDisplacementMapElement;
new(): SVGFEDisplacementMapElement;
SVG_CHANNEL_B: number;
SVG_CHANNEL_R: number;
SVG_CHANNEL_G: number;
SVG_CHANNEL_UNKNOWN: number;
SVG_CHANNEL_A: number;
}
interface AnimationEvent extends Event {
animationName: string;
elapsedTime: number;
initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void;
}
declare var AnimationEvent: {
prototype: AnimationEvent;
new(): AnimationEvent;
}
interface SVGComponentTransferFunctionElement extends SVGElement {
tableValues: SVGAnimatedNumberList;
slope: SVGAnimatedNumber;
type: SVGAnimatedEnumeration;
exponent: SVGAnimatedNumber;
amplitude: SVGAnimatedNumber;
intercept: SVGAnimatedNumber;
offset: SVGAnimatedNumber;
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
}
declare var SVGComponentTransferFunctionElement: {
prototype: SVGComponentTransferFunctionElement;
new(): SVGComponentTransferFunctionElement;
SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
}
interface MSRangeCollection {
length: number;
item(index: number): Range;
[index: number]: Range;
}
declare var MSRangeCollection: {
prototype: MSRangeCollection;
new(): MSRangeCollection;
}
interface SVGFEDistantLightElement extends SVGElement {
azimuth: SVGAnimatedNumber;
elevation: SVGAnimatedNumber;
}
declare var SVGFEDistantLightElement: {
prototype: SVGFEDistantLightElement;
new(): SVGFEDistantLightElement;
}
interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncBElement: {
prototype: SVGFEFuncBElement;
new(): SVGFEFuncBElement;
}
interface IDBKeyRange {
upper: any;
upperOpen: boolean;
lower: any;
lowerOpen: boolean;
}
declare var IDBKeyRange: {
prototype: IDBKeyRange;
new(): IDBKeyRange;
bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;
only(value: any): IDBKeyRange;
lowerBound(bound: any, open?: boolean): IDBKeyRange;
upperBound(bound: any, open?: boolean): IDBKeyRange;
}
interface WindowConsole {
console: Console;
}
interface IDBTransaction extends EventTarget {
oncomplete: (ev: Event) => any;
db: IDBDatabase;
mode: string;
error: DOMError;
onerror: (ev: ErrorEvent) => any;
onabort: (ev: UIEvent) => any;
abort(): void;
objectStore(name: string): IDBObjectStore;
READ_ONLY: string;
VERSION_CHANGE: string;
READ_WRITE: string;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBTransaction: {
prototype: IDBTransaction;
new(): IDBTransaction;
READ_ONLY: string;
VERSION_CHANGE: string;
READ_WRITE: string;
}
interface AudioTrack {
kind: string;
language: string;
id: string;
label: string;
enabled: boolean;
sourceBuffer: SourceBuffer;
}
declare var AudioTrack: {
prototype: AudioTrack;
new(): AudioTrack;
}
interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
orderY: SVGAnimatedInteger;
kernelUnitLengthY: SVGAnimatedNumber;
orderX: SVGAnimatedInteger;
preserveAlpha: SVGAnimatedBoolean;
kernelMatrix: SVGAnimatedNumberList;
edgeMode: SVGAnimatedEnumeration;
kernelUnitLengthX: SVGAnimatedNumber;
bias: SVGAnimatedNumber;
targetX: SVGAnimatedInteger;
targetY: SVGAnimatedInteger;
divisor: SVGAnimatedNumber;
in1: SVGAnimatedString;
SVG_EDGEMODE_WRAP: number;
SVG_EDGEMODE_DUPLICATE: number;
SVG_EDGEMODE_UNKNOWN: number;
SVG_EDGEMODE_NONE: number;
}
declare var SVGFEConvolveMatrixElement: {
prototype: SVGFEConvolveMatrixElement;
new(): SVGFEConvolveMatrixElement;
SVG_EDGEMODE_WRAP: number;
SVG_EDGEMODE_DUPLICATE: number;
SVG_EDGEMODE_UNKNOWN: number;
SVG_EDGEMODE_NONE: number;
}
interface TextTrackCueList {
length: number;
item(index: number): TextTrackCue;
[index: number]: TextTrackCue;
getCueById(id: string): TextTrackCue;
}
declare var TextTrackCueList: {
prototype: TextTrackCueList;
new(): TextTrackCueList;
}
interface CSSKeyframesRule extends CSSRule {
name: string;
cssRules: CSSRuleList;
findRule(rule: string): CSSKeyframeRule;
deleteRule(rule: string): void;
appendRule(rule: string): void;
}
declare var CSSKeyframesRule: {
prototype: CSSKeyframesRule;
new(): CSSKeyframesRule;
}
interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
baseFrequencyX: SVGAnimatedNumber;
numOctaves: SVGAnimatedInteger;
type: SVGAnimatedEnumeration;
baseFrequencyY: SVGAnimatedNumber;
stitchTiles: SVGAnimatedEnumeration;
seed: SVGAnimatedNumber;
SVG_STITCHTYPE_UNKNOWN: number;
SVG_STITCHTYPE_NOSTITCH: number;
SVG_TURBULENCE_TYPE_UNKNOWN: number;
SVG_TURBULENCE_TYPE_TURBULENCE: number;
SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
SVG_STITCHTYPE_STITCH: number;
}
declare var SVGFETurbulenceElement: {
prototype: SVGFETurbulenceElement;
new(): SVGFETurbulenceElement;
SVG_STITCHTYPE_UNKNOWN: number;
SVG_STITCHTYPE_NOSTITCH: number;
SVG_TURBULENCE_TYPE_UNKNOWN: number;
SVG_TURBULENCE_TYPE_TURBULENCE: number;
SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
SVG_STITCHTYPE_STITCH: number;
}
interface TextTrackList extends EventTarget {
length: number;
onaddtrack: (ev: TrackEvent) => any;
item(index: number): TextTrack;
[index: number]: TextTrack;
addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrackList: {
prototype: TextTrackList;
new(): TextTrackList;
}
interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
}
declare var SVGFEFuncGElement: {
prototype: SVGFEFuncGElement;
new(): SVGFEFuncGElement;
}
interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
type: SVGAnimatedEnumeration;
values: SVGAnimatedNumberList;
SVG_FECOLORMATRIX_TYPE_SATURATE: number;
SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
SVG_FECOLORMATRIX_TYPE_MATRIX: number;
SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
}
declare var SVGFEColorMatrixElement: {
prototype: SVGFEColorMatrixElement;
new(): SVGFEColorMatrixElement;
SVG_FECOLORMATRIX_TYPE_SATURATE: number;
SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
SVG_FECOLORMATRIX_TYPE_MATRIX: number;
SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
}
interface SVGFESpotLightElement extends SVGElement {
pointsAtY: SVGAnimatedNumber;
y: SVGAnimatedNumber;
limitingConeAngle: SVGAnimatedNumber;
specularExponent: SVGAnimatedNumber;
x: SVGAnimatedNumber;
pointsAtZ: SVGAnimatedNumber;
z: SVGAnimatedNumber;
pointsAtX: SVGAnimatedNumber;
}
declare var SVGFESpotLightElement: {
prototype: SVGFESpotLightElement;
new(): SVGFESpotLightElement;
}
interface WindowBase64 {
btoa(rawString: string): string;
atob(encodedString: string): string;
}
interface IDBDatabase extends EventTarget {
version: string;
name: string;
objectStoreNames: DOMStringList;
onerror: (ev: ErrorEvent) => any;
onabort: (ev: UIEvent) => any;
createObjectStore(name: string, optionalParameters?: any): IDBObjectStore;
close(): void;
transaction(storeNames: any, mode?: string): IDBTransaction;
deleteObjectStore(name: string): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBDatabase: {
prototype: IDBDatabase;
new(): IDBDatabase;
}
interface DOMStringList {
length: number;
contains(str: string): boolean;
item(index: number): string;
[index: number]: string;
}
declare var DOMStringList: {
prototype: DOMStringList;
new(): DOMStringList;
}
interface IDBOpenDBRequest extends IDBRequest {
onupgradeneeded: (ev: IDBVersionChangeEvent) => any;
onblocked: (ev: Event) => any;
addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void;
addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBOpenDBRequest: {
prototype: IDBOpenDBRequest;
new(): IDBOpenDBRequest;
}
interface HTMLProgressElement extends HTMLElement {
/**
* Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value.
*/
value: number;
/**
* Defines the maximum, or "done" value for a progress element.
*/
max: number;
/**
* Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar).
*/
position: number;
/**
* Retrieves a reference to the form that the object is embedded in.
*/
form: HTMLFormElement;
}
declare var HTMLProgressElement: {
prototype: HTMLProgressElement;
new(): HTMLProgressElement;
}
interface MSLaunchUriCallback {
(): void;
}
interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
dy: SVGAnimatedNumber;
in1: SVGAnimatedString;
dx: SVGAnimatedNumber;
}
declare var SVGFEOffsetElement: {
prototype: SVGFEOffsetElement;
new(): SVGFEOffsetElement;
}
interface MSUnsafeFunctionCallback {
(): any;
}
interface TextTrack extends EventTarget {
language: string;
mode: any;
readyState: number;
activeCues: TextTrackCueList;
cues: TextTrackCueList;
oncuechange: (ev: Event) => any;
kind: string;
onload: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
label: string;
addCue(cue: TextTrackCue): void;
removeCue(cue: TextTrackCue): void;
ERROR: number;
SHOWING: number;
LOADING: number;
LOADED: number;
NONE: number;
HIDDEN: number;
DISABLED: number;
addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var TextTrack: {
prototype: TextTrack;
new(): TextTrack;
ERROR: number;
SHOWING: number;
LOADING: number;
LOADED: number;
NONE: number;
HIDDEN: number;
DISABLED: number;
}
interface MediaQueryListListener {
(mql: MediaQueryList): void;
}
interface IDBRequest extends EventTarget {
source: any;
onsuccess: (ev: Event) => any;
error: DOMError;
transaction: IDBTransaction;
onerror: (ev: ErrorEvent) => any;
readyState: string;
result: any;
addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var IDBRequest: {
prototype: IDBRequest;
new(): IDBRequest;
}
interface MessagePort extends EventTarget {
onmessage: (ev: MessageEvent) => any;
close(): void;
postMessage(message?: any, ports?: any): void;
start(): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MessagePort: {
prototype: MessagePort;
new(): MessagePort;
}
interface FileReader extends MSBaseReader {
error: DOMError;
readAsArrayBuffer(blob: Blob): void;
readAsDataURL(blob: Blob): void;
readAsText(blob: Blob, encoding?: string): void;
}
declare var FileReader: {
prototype: FileReader;
new(): FileReader;
}
interface ApplicationCache extends EventTarget {
status: number;
ondownloading: (ev: Event) => any;
onprogress: (ev: ProgressEvent) => any;
onupdateready: (ev: Event) => any;
oncached: (ev: Event) => any;
onobsolete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
onchecking: (ev: Event) => any;
onnoupdate: (ev: Event) => any;
swapCache(): void;
abort(): void;
update(): void;
CHECKING: number;
UNCACHED: number;
UPDATEREADY: number;
DOWNLOADING: number;
IDLE: number;
OBSOLETE: number;
addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var ApplicationCache: {
prototype: ApplicationCache;
new(): ApplicationCache;
CHECKING: number;
UNCACHED: number;
UPDATEREADY: number;
DOWNLOADING: number;
IDLE: number;
OBSOLETE: number;
}
interface FrameRequestCallback {
(time: number): void;
}
interface PopStateEvent extends Event {
state: any;
initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void;
}
declare var PopStateEvent: {
prototype: PopStateEvent;
new(): PopStateEvent;
}
interface CSSKeyframeRule extends CSSRule {
keyText: string;
style: CSSStyleDeclaration;
}
declare var CSSKeyframeRule: {
prototype: CSSKeyframeRule;
new(): CSSKeyframeRule;
}
interface MSFileSaver {
msSaveBlob(blob: any, defaultName?: string): boolean;
msSaveOrOpenBlob(blob: any, defaultName?: string): boolean;
}
interface MSStream {
type: string;
msDetachStream(): any;
msClose(): void;
}
declare var MSStream: {
prototype: MSStream;
new(): MSStream;
}
interface MSBlobBuilder {
append(data: any, endings?: string): void;
getBlob(contentType?: string): Blob;
}
declare var MSBlobBuilder: {
prototype: MSBlobBuilder;
new(): MSBlobBuilder;
}
interface DOMSettableTokenList extends DOMTokenList {
value: string;
}
declare var DOMSettableTokenList: {
prototype: DOMSettableTokenList;
new(): DOMSettableTokenList;
}
interface IDBFactory {
open(name: string, version?: number): IDBOpenDBRequest;
cmp(first: any, second: any): number;
deleteDatabase(name: string): IDBOpenDBRequest;
}
declare var IDBFactory: {
prototype: IDBFactory;
new(): IDBFactory;
}
interface MSPointerEvent extends MouseEvent {
width: number;
rotation: number;
pressure: number;
pointerType: any;
isPrimary: boolean;
tiltY: number;
height: number;
intermediatePoints: any;
currentPoint: any;
tiltX: number;
hwTimestamp: number;
pointerId: number;
initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
getCurrentPoint(element: Element): void;
getIntermediatePoints(element: Element): void;
MSPOINTER_TYPE_PEN: number;
MSPOINTER_TYPE_MOUSE: number;
MSPOINTER_TYPE_TOUCH: number;
}
declare var MSPointerEvent: {
prototype: MSPointerEvent;
new(): MSPointerEvent;
MSPOINTER_TYPE_PEN: number;
MSPOINTER_TYPE_MOUSE: number;
MSPOINTER_TYPE_TOUCH: number;
}
interface MSManipulationEvent extends UIEvent {
lastState: number;
currentState: number;
initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void;
MS_MANIPULATION_STATE_STOPPED: number;
MS_MANIPULATION_STATE_ACTIVE: number;
MS_MANIPULATION_STATE_INERTIA: number;
MS_MANIPULATION_STATE_SELECTING: number;
MS_MANIPULATION_STATE_COMMITTED: number;
MS_MANIPULATION_STATE_PRESELECT: number;
MS_MANIPULATION_STATE_DRAGGING: number;
MS_MANIPULATION_STATE_CANCELLED: number;
}
declare var MSManipulationEvent: {
prototype: MSManipulationEvent;
new(): MSManipulationEvent;
MS_MANIPULATION_STATE_STOPPED: number;
MS_MANIPULATION_STATE_ACTIVE: number;
MS_MANIPULATION_STATE_INERTIA: number;
MS_MANIPULATION_STATE_SELECTING: number;
MS_MANIPULATION_STATE_COMMITTED: number;
MS_MANIPULATION_STATE_PRESELECT: number;
MS_MANIPULATION_STATE_DRAGGING: number;
MS_MANIPULATION_STATE_CANCELLED: number;
}
interface FormData {
append(name: any, value: any, blobName?: string): void;
}
declare var FormData: {
prototype: FormData;
new(): FormData;
}
interface HTMLDataListElement extends HTMLElement {
options: HTMLCollection;
}
declare var HTMLDataListElement: {
prototype: HTMLDataListElement;
new(): HTMLDataListElement;
}
interface SVGFEImageElement extends SVGElement, SVGLangSpace, SVGFilterPrimitiveStandardAttributes, SVGURIReference, SVGExternalResourcesRequired {
preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
}
declare var SVGFEImageElement: {
prototype: SVGFEImageElement;
new(): SVGFEImageElement;
}
interface AbstractWorker extends EventTarget {
onerror: (ev: ErrorEvent) => any;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
operator: SVGAnimatedEnumeration;
in2: SVGAnimatedString;
k2: SVGAnimatedNumber;
k1: SVGAnimatedNumber;
k3: SVGAnimatedNumber;
in1: SVGAnimatedString;
k4: SVGAnimatedNumber;
SVG_FECOMPOSITE_OPERATOR_OUT: number;
SVG_FECOMPOSITE_OPERATOR_OVER: number;
SVG_FECOMPOSITE_OPERATOR_XOR: number;
SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
SVG_FECOMPOSITE_OPERATOR_IN: number;
SVG_FECOMPOSITE_OPERATOR_ATOP: number;
}
declare var SVGFECompositeElement: {
prototype: SVGFECompositeElement;
new(): SVGFECompositeElement;
SVG_FECOMPOSITE_OPERATOR_OUT: number;
SVG_FECOMPOSITE_OPERATOR_OVER: number;
SVG_FECOMPOSITE_OPERATOR_XOR: number;
SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
SVG_FECOMPOSITE_OPERATOR_IN: number;
SVG_FECOMPOSITE_OPERATOR_ATOP: number;
}
interface ValidityState {
customError: boolean;
valueMissing: boolean;
stepMismatch: boolean;
rangeUnderflow: boolean;
rangeOverflow: boolean;
typeMismatch: boolean;
patternMismatch: boolean;
tooLong: boolean;
valid: boolean;
}
declare var ValidityState: {
prototype: ValidityState;
new(): ValidityState;
}
interface HTMLTrackElement extends HTMLElement {
kind: string;
src: string;
srclang: string;
track: TextTrack;
label: string;
default: boolean;
readyState: number;
ERROR: number;
LOADING: number;
LOADED: number;
NONE: number;
}
declare var HTMLTrackElement: {
prototype: HTMLTrackElement;
new(): HTMLTrackElement;
ERROR: number;
LOADING: number;
LOADED: number;
NONE: number;
}
interface MSApp {
createFileFromStorageFile(storageFile: any): File;
createBlobFromRandomAccessStream(type: string, seeker: any): Blob;
createStreamFromInputStream(type: string, inputStream: any): MSStream;
terminateApp(exceptionObject: any): void;
createDataPackage(object: any): any;
execUnsafeLocalFunction(unsafeFunction: MSUnsafeFunctionCallback): any;
getHtmlPrintDocumentSource(htmlDoc: any): any;
addPublicLocalApplicationUri(uri: string): void;
createDataPackageFromSelection(): any;
getViewOpener(): MSAppView;
suppressSubdownloadCredentialPrompts(suppress: boolean): void;
execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void;
isTaskScheduledAtPriorityOrHigher(priority: string): boolean;
execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any;
createNewView(uri: string): MSAppView;
getCurrentPriority(): string;
NORMAL: string;
HIGH: string;
IDLE: string;
CURRENT: string;
}
declare var MSApp: MSApp;
interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
in1: SVGAnimatedString;
}
declare var SVGFEComponentTransferElement: {
prototype: SVGFEComponentTransferElement;
new(): SVGFEComponentTransferElement;
}
interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
kernelUnitLengthY: SVGAnimatedNumber;
surfaceScale: SVGAnimatedNumber;
in1: SVGAnimatedString;
kernelUnitLengthX: SVGAnimatedNumber;
diffuseConstant: SVGAnimatedNumber;
}
declare var SVGFEDiffuseLightingElement: {
prototype: SVGFEDiffuseLightingElement;
new(): SVGFEDiffuseLightingElement;
}
interface MSCSSMatrix {
m24: number;
m34: number;
a: number;
d: number;
m32: number;
m41: number;
m11: number;
f: number;
e: number;
m23: number;
m14: number;
m33: number;
m22: number;
m21: number;
c: number;
m12: number;
b: number;
m42: number;
m31: number;
m43: number;
m13: number;
m44: number;
multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix;
skewY(angle: number): MSCSSMatrix;
setMatrixValue(value: string): void;
inverse(): MSCSSMatrix;
rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix;
toString(): string;
rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix;
translate(x: number, y: number, z?: number): MSCSSMatrix;
scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix;
skewX(angle: number): MSCSSMatrix;
}
declare var MSCSSMatrix: {
prototype: MSCSSMatrix;
new(text?: string): MSCSSMatrix;
}
interface Worker extends AbstractWorker {
onmessage: (ev: MessageEvent) => any;
postMessage(message: any, ports?: any): void;
terminate(): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var Worker: {
prototype: Worker;
new(stringUrl: string): Worker;
}
interface MSExecAtPriorityFunctionCallback {
(...args: any[]): any;
}
interface MSGraphicsTrust {
status: string;
constrictionActive: boolean;
}
declare var MSGraphicsTrust: {
prototype: MSGraphicsTrust;
new(): MSGraphicsTrust;
}
interface SubtleCrypto {
unwrapKey(wrappedKey: ArrayBufferView, keyAlgorithm: any, keyEncryptionKey: Key, extractable?: boolean, keyUsages?: string[]): KeyOperation;
encrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
importKey(format: string, keyData: ArrayBufferView, algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
wrapKey(key: Key, keyEncryptionKey: Key, keyWrappingAlgorithm: any): KeyOperation;
verify(algorithm: any, key: Key, signature: ArrayBufferView, buffer?: ArrayBufferView): CryptoOperation;
deriveKey(algorithm: any, baseKey: Key, derivedKeyType: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
digest(algorithm: any, buffer?: ArrayBufferView): CryptoOperation;
exportKey(format: string, key: Key): KeyOperation;
generateKey(algorithm: any, extractable?: boolean, keyUsages?: string[]): KeyOperation;
sign(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
decrypt(algorithm: any, key: Key, buffer?: ArrayBufferView): CryptoOperation;
}
declare var SubtleCrypto: {
prototype: SubtleCrypto;
new(): SubtleCrypto;
}
interface Crypto extends RandomSource {
subtle: SubtleCrypto;
}
declare var Crypto: {
prototype: Crypto;
new(): Crypto;
}
interface VideoPlaybackQuality {
totalFrameDelay: number;
creationTime: number;
totalVideoFrames: number;
droppedVideoFrames: number;
}
declare var VideoPlaybackQuality: {
prototype: VideoPlaybackQuality;
new(): VideoPlaybackQuality;
}
interface GlobalEventHandlers {
onpointerenter: (ev: PointerEvent) => any;
onpointerout: (ev: PointerEvent) => any;
onpointerdown: (ev: PointerEvent) => any;
onpointerup: (ev: PointerEvent) => any;
onpointercancel: (ev: PointerEvent) => any;
onpointerover: (ev: PointerEvent) => any;
onpointermove: (ev: PointerEvent) => any;
onpointerleave: (ev: PointerEvent) => any;
addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
interface Key {
algorithm: Algorithm;
type: string;
extractable: boolean;
keyUsage: string[];
}
declare var Key: {
prototype: Key;
new(): Key;
}
interface DeviceAcceleration {
y: number;
x: number;
z: number;
}
declare var DeviceAcceleration: {
prototype: DeviceAcceleration;
new(): DeviceAcceleration;
}
interface HTMLAllCollection extends HTMLCollection {
namedItem(name: string): Element;
// [name: string]: Element;
}
declare var HTMLAllCollection: {
prototype: HTMLAllCollection;
new(): HTMLAllCollection;
}
interface AesGcmEncryptResult {
ciphertext: ArrayBuffer;
tag: ArrayBuffer;
}
declare var AesGcmEncryptResult: {
prototype: AesGcmEncryptResult;
new(): AesGcmEncryptResult;
}
interface NavigationCompletedEvent extends NavigationEvent {
webErrorStatus: number;
isSuccess: boolean;
}
declare var NavigationCompletedEvent: {
prototype: NavigationCompletedEvent;
new(): NavigationCompletedEvent;
}
interface MutationRecord {
oldValue: string;
previousSibling: Node;
addedNodes: NodeList;
attributeName: string;
removedNodes: NodeList;
target: Node;
nextSibling: Node;
attributeNamespace: string;
type: string;
}
declare var MutationRecord: {
prototype: MutationRecord;
new(): MutationRecord;
}
interface MimeTypeArray {
length: number;
item(index: number): Plugin;
[index: number]: Plugin;
namedItem(type: string): Plugin;
// [type: string]: Plugin;
}
declare var MimeTypeArray: {
prototype: MimeTypeArray;
new(): MimeTypeArray;
}
interface KeyOperation extends EventTarget {
oncomplete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
result: any;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var KeyOperation: {
prototype: KeyOperation;
new(): KeyOperation;
}
interface DOMStringMap {
}
declare var DOMStringMap: {
prototype: DOMStringMap;
new(): DOMStringMap;
}
interface DeviceOrientationEvent extends Event {
gamma: number;
alpha: number;
absolute: boolean;
beta: number;
initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void;
}
declare var DeviceOrientationEvent: {
prototype: DeviceOrientationEvent;
new(): DeviceOrientationEvent;
}
interface MSMediaKeys {
keySystem: string;
createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession;
}
declare var MSMediaKeys: {
prototype: MSMediaKeys;
new(keySystem: string): MSMediaKeys;
isTypeSupported(keySystem: string, type?: string): boolean;
}
interface MSMediaKeyMessageEvent extends Event {
destinationURL: string;
message: Uint8Array;
}
declare var MSMediaKeyMessageEvent: {
prototype: MSMediaKeyMessageEvent;
new(): MSMediaKeyMessageEvent;
}
interface MSHTMLWebViewElement extends HTMLElement {
documentTitle: string;
width: number;
src: string;
canGoForward: boolean;
height: number;
canGoBack: boolean;
navigateWithHttpRequestMessage(requestMessage: any): void;
goBack(): void;
navigate(uri: string): void;
stop(): void;
navigateToString(contents: string): void;
captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation;
capturePreviewToBlobAsync(): MSWebViewAsyncOperation;
refresh(): void;
goForward(): void;
navigateToLocalStreamUri(source: string, streamResolver: any): void;
invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation;
buildLocalStreamUri(contentIdentifier: string, relativePath: string): string;
}
declare var MSHTMLWebViewElement: {
prototype: MSHTMLWebViewElement;
new(): MSHTMLWebViewElement;
}
interface NavigationEvent extends Event {
uri: string;
}
declare var NavigationEvent: {
prototype: NavigationEvent;
new(): NavigationEvent;
}
interface RandomSource {
getRandomValues(array: ArrayBufferView): ArrayBufferView;
}
interface SourceBuffer extends EventTarget {
updating: boolean;
appendWindowStart: number;
appendWindowEnd: number;
buffered: TimeRanges;
timestampOffset: number;
audioTracks: AudioTrackList;
appendBuffer(data: ArrayBuffer): void;
remove(start: number, end: number): void;
abort(): void;
appendStream(stream: MSStream, maxSize?: number): void;
}
declare var SourceBuffer: {
prototype: SourceBuffer;
new(): SourceBuffer;
}
interface MSInputMethodContext extends EventTarget {
oncandidatewindowshow: (ev: any) => any;
target: HTMLElement;
compositionStartOffset: number;
oncandidatewindowhide: (ev: any) => any;
oncandidatewindowupdate: (ev: any) => any;
compositionEndOffset: number;
getCompositionAlternatives(): string[];
getCandidateWindowClientRect(): ClientRect;
hasComposition(): boolean;
isCandidateWindowVisible(): boolean;
addEventListener(type: "candidatewindowshow", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "candidatewindowhide", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: "candidatewindowupdate", listener: (ev: any) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSInputMethodContext: {
prototype: MSInputMethodContext;
new(): MSInputMethodContext;
}
interface DeviceRotationRate {
gamma: number;
alpha: number;
beta: number;
}
declare var DeviceRotationRate: {
prototype: DeviceRotationRate;
new(): DeviceRotationRate;
}
interface PluginArray {
length: number;
refresh(reload?: boolean): void;
item(index: number): Plugin;
[index: number]: Plugin;
namedItem(name: string): Plugin;
// [name: string]: Plugin;
}
declare var PluginArray: {
prototype: PluginArray;
new(): PluginArray;
}
interface MSMediaKeyError {
systemCode: number;
code: number;
MS_MEDIA_KEYERR_SERVICE: number;
MS_MEDIA_KEYERR_HARDWARECHANGE: number;
MS_MEDIA_KEYERR_OUTPUT: number;
MS_MEDIA_KEYERR_DOMAIN: number;
MS_MEDIA_KEYERR_UNKNOWN: number;
MS_MEDIA_KEYERR_CLIENT: number;
}
declare var MSMediaKeyError: {
prototype: MSMediaKeyError;
new(): MSMediaKeyError;
MS_MEDIA_KEYERR_SERVICE: number;
MS_MEDIA_KEYERR_HARDWARECHANGE: number;
MS_MEDIA_KEYERR_OUTPUT: number;
MS_MEDIA_KEYERR_DOMAIN: number;
MS_MEDIA_KEYERR_UNKNOWN: number;
MS_MEDIA_KEYERR_CLIENT: number;
}
interface Plugin {
length: number;
filename: string;
version: string;
name: string;
description: string;
item(index: number): MimeType;
[index: number]: MimeType;
namedItem(type: string): MimeType;
// [type: string]: MimeType;
}
declare var Plugin: {
prototype: Plugin;
new(): Plugin;
}
interface MediaSource extends EventTarget {
sourceBuffers: SourceBufferList;
duration: number;
readyState: string;
activeSourceBuffers: SourceBufferList;
addSourceBuffer(type: string): SourceBuffer;
endOfStream(error?: string): void;
removeSourceBuffer(sourceBuffer: SourceBuffer): void;
}
declare var MediaSource: {
prototype: MediaSource;
new(): MediaSource;
isTypeSupported(type: string): boolean;
}
interface SourceBufferList extends EventTarget {
length: number;
item(index: number): SourceBuffer;
[index: number]: SourceBuffer;
}
declare var SourceBufferList: {
prototype: SourceBufferList;
new(): SourceBufferList;
}
interface XMLDocument extends Document {
}
declare var XMLDocument: {
prototype: XMLDocument;
new(): XMLDocument;
}
interface DeviceMotionEvent extends Event {
rotationRate: DeviceRotationRate;
acceleration: DeviceAcceleration;
interval: number;
accelerationIncludingGravity: DeviceAcceleration;
initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void;
}
declare var DeviceMotionEvent: {
prototype: DeviceMotionEvent;
new(): DeviceMotionEvent;
}
interface MimeType {
enabledPlugin: Plugin;
suffixes: string;
type: string;
description: string;
}
declare var MimeType: {
prototype: MimeType;
new(): MimeType;
}
interface PointerEvent extends MouseEvent {
width: number;
rotation: number;
pressure: number;
pointerType: any;
isPrimary: boolean;
tiltY: number;
height: number;
intermediatePoints: any;
currentPoint: any;
tiltX: number;
hwTimestamp: number;
pointerId: number;
initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
getCurrentPoint(element: Element): void;
getIntermediatePoints(element: Element): void;
}
declare var PointerEvent: {
prototype: PointerEvent;
new(): PointerEvent;
}
interface MSDocumentExtensions {
captureEvents(): void;
releaseEvents(): void;
}
interface MutationObserver {
observe(target: Node, options: MutationObserverInit): void;
takeRecords(): MutationRecord[];
disconnect(): void;
}
declare var MutationObserver: {
prototype: MutationObserver;
new (callback: (arr: MutationRecord[], observer: MutationObserver)=>any): MutationObserver;
}
interface MSWebViewAsyncOperation extends EventTarget {
target: MSHTMLWebViewElement;
oncomplete: (ev: Event) => any;
error: DOMError;
onerror: (ev: ErrorEvent) => any;
readyState: number;
type: number;
result: any;
start(): void;
ERROR: number;
TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
TYPE_INVOKE_SCRIPT: number;
COMPLETED: number;
TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
STARTED: number;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var MSWebViewAsyncOperation: {
prototype: MSWebViewAsyncOperation;
new(): MSWebViewAsyncOperation;
ERROR: number;
TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
TYPE_INVOKE_SCRIPT: number;
COMPLETED: number;
TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
STARTED: number;
}
interface ScriptNotifyEvent extends Event {
value: string;
callingUri: string;
}
declare var ScriptNotifyEvent: {
prototype: ScriptNotifyEvent;
new(): ScriptNotifyEvent;
}
interface PerformanceNavigationTiming extends PerformanceEntry {
redirectStart: number;
domainLookupEnd: number;
responseStart: number;
domComplete: number;
domainLookupStart: number;
loadEventStart: number;
unloadEventEnd: number;
fetchStart: number;
requestStart: number;
domInteractive: number;
navigationStart: number;
connectEnd: number;
loadEventEnd: number;
connectStart: number;
responseEnd: number;
domLoading: number;
redirectEnd: number;
redirectCount: number;
unloadEventStart: number;
domContentLoadedEventStart: number;
domContentLoadedEventEnd: number;
type: string;
}
declare var PerformanceNavigationTiming: {
prototype: PerformanceNavigationTiming;
new(): PerformanceNavigationTiming;
}
interface MSMediaKeyNeededEvent extends Event {
initData: Uint8Array;
}
declare var MSMediaKeyNeededEvent: {
prototype: MSMediaKeyNeededEvent;
new(): MSMediaKeyNeededEvent;
}
interface LongRunningScriptDetectedEvent extends Event {
stopPageScriptExecution: boolean;
executionTime: number;
}
declare var LongRunningScriptDetectedEvent: {
prototype: LongRunningScriptDetectedEvent;
new(): LongRunningScriptDetectedEvent;
}
interface MSAppView {
viewId: number;
close(): void;
postMessage(message: any, targetOrigin: string, ports?: any): void;
}
declare var MSAppView: {
prototype: MSAppView;
new(): MSAppView;
}
interface PerfWidgetExternal {
maxCpuSpeed: number;
independentRenderingEnabled: boolean;
irDisablingContentString: string;
irStatusAvailable: boolean;
performanceCounter: number;
averagePaintTime: number;
activeNetworkRequestCount: number;
paintRequestsPerSecond: number;
extraInformationEnabled: boolean;
performanceCounterFrequency: number;
averageFrameTime: number;
repositionWindow(x: number, y: number): void;
getRecentMemoryUsage(last: number): any;
getMemoryUsage(): number;
resizeWindow(width: number, height: number): void;
getProcessCpuUsage(): number;
removeEventListener(eventType: string, callback: (ev: any) => any): void;
getRecentCpuUsage(last: number): any;
addEventListener(eventType: string, callback: (ev: any) => any): void;
getRecentFrames(last: number): any;
getRecentPaintRequests(last: number): any;
}
declare var PerfWidgetExternal: {
prototype: PerfWidgetExternal;
new(): PerfWidgetExternal;
}
interface PageTransitionEvent extends Event {
persisted: boolean;
}
declare var PageTransitionEvent: {
prototype: PageTransitionEvent;
new(): PageTransitionEvent;
}
interface MutationCallback {
(mutations: MutationRecord[], observer: MutationObserver): void;
}
interface HTMLDocument extends Document {
}
declare var HTMLDocument: {
prototype: HTMLDocument;
new(): HTMLDocument;
}
interface KeyPair {
privateKey: Key;
publicKey: Key;
}
declare var KeyPair: {
prototype: KeyPair;
new(): KeyPair;
}
interface MSMediaKeySession extends EventTarget {
sessionId: string;
error: MSMediaKeyError;
keySystem: string;
close(): void;
update(key: Uint8Array): void;
}
declare var MSMediaKeySession: {
prototype: MSMediaKeySession;
new(): MSMediaKeySession;
}
interface UnviewableContentIdentifiedEvent extends NavigationEvent {
referrer: string;
}
declare var UnviewableContentIdentifiedEvent: {
prototype: UnviewableContentIdentifiedEvent;
new(): UnviewableContentIdentifiedEvent;
}
interface CryptoOperation extends EventTarget {
algorithm: Algorithm;
oncomplete: (ev: Event) => any;
onerror: (ev: ErrorEvent) => any;
onprogress: (ev: ProgressEvent) => any;
onabort: (ev: UIEvent) => any;
key: Key;
result: any;
abort(): void;
finish(): void;
process(buffer: ArrayBufferView): void;
addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
}
declare var CryptoOperation: {
prototype: CryptoOperation;
new(): CryptoOperation;
}
interface WebGLTexture extends WebGLObject {
}
declare var WebGLTexture: {
prototype: WebGLTexture;
new(): WebGLTexture;
}
interface OES_texture_float {
}
declare var OES_texture_float: {
prototype: OES_texture_float;
new(): OES_texture_float;
}
interface WebGLContextEvent extends Event {
statusMessage: string;
}
declare var WebGLContextEvent: {
prototype: WebGLContextEvent;
new(): WebGLContextEvent;
}
interface WebGLRenderbuffer extends WebGLObject {
}
declare var WebGLRenderbuffer: {
prototype: WebGLRenderbuffer;
new(): WebGLRenderbuffer;
}
interface WebGLUniformLocation {
}
declare var WebGLUniformLocation: {
prototype: WebGLUniformLocation;
new(): WebGLUniformLocation;
}
interface WebGLActiveInfo {
name: string;
type: number;
size: number;
}
declare var WebGLActiveInfo: {
prototype: WebGLActiveInfo;
new(): WebGLActiveInfo;
}
interface WEBGL_compressed_texture_s3tc {
COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
COMPRESSED_RGB_S3TC_DXT1_EXT: number;
}
declare var WEBGL_compressed_texture_s3tc: {
prototype: WEBGL_compressed_texture_s3tc;
new(): WEBGL_compressed_texture_s3tc;
COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
COMPRESSED_RGB_S3TC_DXT1_EXT: number;
}
interface WebGLRenderingContext {
drawingBufferWidth: number;
drawingBufferHeight: number;
canvas: HTMLCanvasElement;
getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation;
bindTexture(target: number, texture: WebGLTexture): void;
bufferData(target: number, data: ArrayBufferView, usage: number): void;
bufferData(target: number, data: ArrayBuffer, usage: number): void;
bufferData(target: number, size: number, usage: number): void;
depthMask(flag: boolean): void;
getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;
vertexAttrib3fv(indx: number, values: number[]): void;
vertexAttrib3fv(indx: number, values: Float32Array): void;
linkProgram(program: WebGLProgram): void;
getSupportedExtensions(): string[];
bufferSubData(target: number, offset: number, data: ArrayBuffer): void;
bufferSubData(target: number, offset: number, data: ArrayBufferView): void;
vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
polygonOffset(factor: number, units: number): void;
blendColor(red: number, green: number, blue: number, alpha: number): void;
createTexture(): WebGLTexture;
hint(target: number, mode: number): void;
getVertexAttrib(index: number, pname: number): any;
enableVertexAttribArray(index: number): void;
depthRange(zNear: number, zFar: number): void;
cullFace(mode: number): void;
createFramebuffer(): WebGLFramebuffer;
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void;
deleteFramebuffer(framebuffer: WebGLFramebuffer): void;
colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void;
uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
getExtension(name: string): any;
createProgram(): WebGLProgram;
deleteShader(shader: WebGLShader): void;
getAttachedShaders(program: WebGLProgram): WebGLShader[];
enable(cap: number): void;
blendEquation(mode: number): void;
texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void;
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void;
createBuffer(): WebGLBuffer;
deleteTexture(texture: WebGLTexture): void;
useProgram(program: WebGLProgram): void;
vertexAttrib2fv(indx: number, values: number[]): void;
vertexAttrib2fv(indx: number, values: Float32Array): void;
checkFramebufferStatus(target: number): number;
frontFace(mode: number): void;
getBufferParameter(target: number, pname: number): any;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void;
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void;
copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void;
getVertexAttribOffset(index: number, pname: number): number;
disableVertexAttribArray(index: number): void;
blendFunc(sfactor: number, dfactor: number): void;
drawElements(mode: number, count: number, type: number, offset: number): void;
isFramebuffer(framebuffer: WebGLFramebuffer): boolean;
uniform3iv(location: WebGLUniformLocation, v: number[]): void;
uniform3iv(location: WebGLUniformLocation, v: Int32Array): void;
lineWidth(width: number): void;
getShaderInfoLog(shader: WebGLShader): string;
getTexParameter(target: number, pname: number): any;
getParameter(pname: number): any;
getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat;
getContextAttributes(): WebGLContextAttributes;
vertexAttrib1f(indx: number, x: number): void;
bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void;
compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void;
isContextLost(): boolean;
uniform1iv(location: WebGLUniformLocation, v: number[]): void;
uniform1iv(location: WebGLUniformLocation, v: Int32Array): void;
getRenderbufferParameter(target: number, pname: number): any;
uniform2fv(location: WebGLUniformLocation, v: number[]): void;
uniform2fv(location: WebGLUniformLocation, v: Float32Array): void;
isTexture(texture: WebGLTexture): boolean;
getError(): number;
shaderSource(shader: WebGLShader, source: string): void;
deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void;
stencilMask(mask: number): void;
bindBuffer(target: number, buffer: WebGLBuffer): void;
getAttribLocation(program: WebGLProgram, name: string): number;
uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void;
blendEquationSeparate(modeRGB: number, modeAlpha: number): void;
clear(mask: number): void;
blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void;
stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void;
readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
scissor(x: number, y: number, width: number, height: number): void;
uniform2i(location: WebGLUniformLocation, x: number, y: number): void;
getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo;
getShaderSource(shader: WebGLShader): string;
generateMipmap(target: number): void;
bindAttribLocation(program: WebGLProgram, index: number, name: string): void;
uniform1fv(location: WebGLUniformLocation, v: number[]): void;
uniform1fv(location: WebGLUniformLocation, v: Float32Array): void;
uniform2iv(location: WebGLUniformLocation, v: number[]): void;
uniform2iv(location: WebGLUniformLocation, v: Int32Array): void;
stencilOp(fail: number, zfail: number, zpass: number): void;
uniform4fv(location: WebGLUniformLocation, v: number[]): void;
uniform4fv(location: WebGLUniformLocation, v: Float32Array): void;
vertexAttrib1fv(indx: number, values: number[]): void;
vertexAttrib1fv(indx: number, values: Float32Array): void;
flush(): void;
uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
deleteProgram(program: WebGLProgram): void;
isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean;
uniform1i(location: WebGLUniformLocation, x: number): void;
getProgramParameter(program: WebGLProgram, pname: number): any;
getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo;
stencilFunc(func: number, ref: number, mask: number): void;
pixelStorei(pname: number, param: number): void;
disable(cap: number): void;
vertexAttrib4fv(indx: number, values: number[]): void;
vertexAttrib4fv(indx: number, values: Float32Array): void;
createRenderbuffer(): WebGLRenderbuffer;
isBuffer(buffer: WebGLBuffer): boolean;
stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void;
getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any;
uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
sampleCoverage(value: number, invert: boolean): void;
depthFunc(func: number): void;
texParameterf(target: number, pname: number, param: number): void;
vertexAttrib3f(indx: number, x: number, y: number, z: number): void;
drawArrays(mode: number, first: number, count: number): void;
texParameteri(target: number, pname: number, param: number): void;
vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void;
getShaderParameter(shader: WebGLShader, pname: number): any;
clearDepth(depth: number): void;
activeTexture(texture: number): void;
viewport(x: number, y: number, width: number, height: number): void;
detachShader(program: WebGLProgram, shader: WebGLShader): void;
uniform1f(location: WebGLUniformLocation, x: number): void;
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: number[]): void;
uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array): void;
deleteBuffer(buffer: WebGLBuffer): void;
copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void;
uniform3fv(location: WebGLUniformLocation, v: number[]): void;
uniform3fv(location: WebGLUniformLocation, v: Float32Array): void;
stencilMaskSeparate(face: number, mask: number): void;
attachShader(program: WebGLProgram, shader: WebGLShader): void;
compileShader(shader: WebGLShader): void;
clearColor(red: number, green: number, blue: number, alpha: number): void;
isShader(shader: WebGLShader): boolean;
clearStencil(s: number): void;
framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void;
finish(): void;
uniform2f(location: WebGLUniformLocation, x: number, y: number): void;
renderbufferStorage(target: number, internalformat: number, width: number, height: number): void;
uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void;
getProgramInfoLog(program: WebGLProgram): string;
validateProgram(program: WebGLProgram): void;
isEnabled(cap: number): boolean;
vertexAttrib2f(indx: number, x: number, y: number): void;
isProgram(program: WebGLProgram): boolean;
createShader(type: number): WebGLShader;
bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void;
uniform4iv(location: WebGLUniformLocation, v: number[]): void;
uniform4iv(location: WebGLUniformLocation, v: Int32Array): void;
DEPTH_FUNC: number;
DEPTH_COMPONENT16: number;
REPLACE: number;
REPEAT: number;
VERTEX_ATTRIB_ARRAY_ENABLED: number;
FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
STENCIL_BUFFER_BIT: number;
RENDERER: number;
STENCIL_BACK_REF: number;
TEXTURE26: number;
RGB565: number;
DITHER: number;
CONSTANT_COLOR: number;
GENERATE_MIPMAP_HINT: number;
POINTS: number;
DECR: number;
INT_VEC3: number;
TEXTURE28: number;
ONE_MINUS_CONSTANT_ALPHA: number;
BACK: number;
RENDERBUFFER_STENCIL_SIZE: number;
UNPACK_FLIP_Y_WEBGL: number;
BLEND: number;
TEXTURE9: number;
ARRAY_BUFFER_BINDING: number;
MAX_VIEWPORT_DIMS: number;
INVALID_FRAMEBUFFER_OPERATION: number;
TEXTURE: number;
TEXTURE0: number;
TEXTURE31: number;
TEXTURE24: number;
HIGH_INT: number;
RENDERBUFFER_BINDING: number;
BLEND_COLOR: number;
FASTEST: number;
STENCIL_WRITEMASK: number;
ALIASED_POINT_SIZE_RANGE: number;
TEXTURE12: number;
DST_ALPHA: number;
BLEND_EQUATION_RGB: number;
FRAMEBUFFER_COMPLETE: number;
NEAREST_MIPMAP_NEAREST: number;
VERTEX_ATTRIB_ARRAY_SIZE: number;
TEXTURE3: number;
DEPTH_WRITEMASK: number;
CONTEXT_LOST_WEBGL: number;
INVALID_VALUE: number;
TEXTURE_MAG_FILTER: number;
ONE_MINUS_CONSTANT_COLOR: number;
ONE_MINUS_SRC_ALPHA: number;
TEXTURE_CUBE_MAP_POSITIVE_Z: number;
NOTEQUAL: number;
ALPHA: number;
DEPTH_STENCIL: number;
MAX_VERTEX_UNIFORM_VECTORS: number;
DEPTH_COMPONENT: number;
RENDERBUFFER_RED_SIZE: number;
TEXTURE20: number;
RED_BITS: number;
RENDERBUFFER_BLUE_SIZE: number;
SCISSOR_BOX: number;
VENDOR: number;
FRONT_AND_BACK: number;
CONSTANT_ALPHA: number;
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
NEAREST: number;
CULL_FACE: number;
ALIASED_LINE_WIDTH_RANGE: number;
TEXTURE19: number;
FRONT: number;
DEPTH_CLEAR_VALUE: number;
GREEN_BITS: number;
TEXTURE29: number;
TEXTURE23: number;
MAX_RENDERBUFFER_SIZE: number;
STENCIL_ATTACHMENT: number;
TEXTURE27: number;
BOOL_VEC2: number;
OUT_OF_MEMORY: number;
MIRRORED_REPEAT: number;
POLYGON_OFFSET_UNITS: number;
TEXTURE_MIN_FILTER: number;
STENCIL_BACK_PASS_DEPTH_PASS: number;
LINE_LOOP: number;
FLOAT_MAT3: number;
TEXTURE14: number;
LINEAR: number;
RGB5_A1: number;
ONE_MINUS_SRC_COLOR: number;
SAMPLE_COVERAGE_INVERT: number;
DONT_CARE: number;
FRAMEBUFFER_BINDING: number;
RENDERBUFFER_ALPHA_SIZE: number;
STENCIL_REF: number;
ZERO: number;
DECR_WRAP: number;
SAMPLE_COVERAGE: number;
STENCIL_BACK_FUNC: number;
TEXTURE30: number;
VIEWPORT: number;
STENCIL_BITS: number;
FLOAT: number;
COLOR_WRITEMASK: number;
SAMPLE_COVERAGE_VALUE: number;
TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
STENCIL_BACK_FAIL: number;
FLOAT_MAT4: number;
UNSIGNED_SHORT_4_4_4_4: number;
TEXTURE6: number;
RENDERBUFFER_WIDTH: number;
RGBA4: number;
ALWAYS: number;
BLEND_EQUATION_ALPHA: number;
COLOR_BUFFER_BIT: number;
TEXTURE_CUBE_MAP: number;
DEPTH_BUFFER_BIT: number;
STENCIL_CLEAR_VALUE: number;
BLEND_EQUATION: number;
RENDERBUFFER_GREEN_SIZE: number;
NEAREST_MIPMAP_LINEAR: number;
VERTEX_ATTRIB_ARRAY_TYPE: number;
INCR_WRAP: number;
ONE_MINUS_DST_COLOR: number;
HIGH_FLOAT: number;
BYTE: number;
FRONT_FACE: number;
SAMPLE_ALPHA_TO_COVERAGE: number;
CCW: number;
TEXTURE13: number;
MAX_VERTEX_ATTRIBS: number;
MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_WRAP_T: number;
UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
FLOAT_VEC2: number;
LUMINANCE: number;
GREATER: number;
INT_VEC2: number;
VALIDATE_STATUS: number;
FRAMEBUFFER: number;
FRAMEBUFFER_UNSUPPORTED: number;
TEXTURE5: number;
FUNC_SUBTRACT: number;
BLEND_DST_ALPHA: number;
SAMPLER_CUBE: number;
ONE_MINUS_DST_ALPHA: number;
LESS: number;
TEXTURE_CUBE_MAP_POSITIVE_X: number;
BLUE_BITS: number;
DEPTH_TEST: number;
VERTEX_ATTRIB_ARRAY_STRIDE: number;
DELETE_STATUS: number;
TEXTURE18: number;
POLYGON_OFFSET_FACTOR: number;
UNSIGNED_INT: number;
TEXTURE_2D: number;
DST_COLOR: number;
FLOAT_MAT2: number;
COMPRESSED_TEXTURE_FORMATS: number;
MAX_FRAGMENT_UNIFORM_VECTORS: number;
DEPTH_STENCIL_ATTACHMENT: number;
LUMINANCE_ALPHA: number;
CW: number;
VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
LINEAR_MIPMAP_LINEAR: number;
BUFFER_SIZE: number;
SAMPLE_BUFFERS: number;
TEXTURE15: number;
ACTIVE_TEXTURE: number;
VERTEX_SHADER: number;
TEXTURE22: number;
VERTEX_ATTRIB_ARRAY_POINTER: number;
INCR: number;
COMPILE_STATUS: number;
MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
TEXTURE7: number;
UNSIGNED_SHORT_5_5_5_1: number;
DEPTH_BITS: number;
RGBA: number;
TRIANGLE_STRIP: number;
COLOR_CLEAR_VALUE: number;
BROWSER_DEFAULT_WEBGL: number;
INVALID_ENUM: number;
SCISSOR_TEST: number;
LINE_STRIP: number;
FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
STENCIL_FUNC: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
RENDERBUFFER_HEIGHT: number;
TEXTURE8: number;
TRIANGLES: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
STENCIL_BACK_VALUE_MASK: number;
TEXTURE25: number;
RENDERBUFFER: number;
LEQUAL: number;
TEXTURE1: number;
STENCIL_INDEX8: number;
FUNC_ADD: number;
STENCIL_FAIL: number;
BLEND_SRC_ALPHA: number;
BOOL: number;
ALPHA_BITS: number;
LOW_INT: number;
TEXTURE10: number;
SRC_COLOR: number;
MAX_VARYING_VECTORS: number;
BLEND_DST_RGB: number;
TEXTURE_BINDING_CUBE_MAP: number;
STENCIL_INDEX: number;
TEXTURE_BINDING_2D: number;
MEDIUM_INT: number;
SHADER_TYPE: number;
POLYGON_OFFSET_FILL: number;
DYNAMIC_DRAW: number;
TEXTURE4: number;
STENCIL_BACK_PASS_DEPTH_FAIL: number;
STREAM_DRAW: number;
MAX_CUBE_MAP_TEXTURE_SIZE: number;
TEXTURE17: number;
TRIANGLE_FAN: number;
UNPACK_ALIGNMENT: number;
CURRENT_PROGRAM: number;
LINES: number;
INVALID_OPERATION: number;
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
LINEAR_MIPMAP_NEAREST: number;
CLAMP_TO_EDGE: number;
RENDERBUFFER_DEPTH_SIZE: number;
TEXTURE_WRAP_S: number;
ELEMENT_ARRAY_BUFFER: number;
UNSIGNED_SHORT_5_6_5: number;
ACTIVE_UNIFORMS: number;
FLOAT_VEC3: number;
NO_ERROR: number;
ATTACHED_SHADERS: number;
DEPTH_ATTACHMENT: number;
TEXTURE11: number;
STENCIL_TEST: number;
ONE: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
STATIC_DRAW: number;
GEQUAL: number;
BOOL_VEC4: number;
COLOR_ATTACHMENT0: number;
PACK_ALIGNMENT: number;
MAX_TEXTURE_SIZE: number;
STENCIL_PASS_DEPTH_FAIL: number;
CULL_FACE_MODE: number;
TEXTURE16: number;
STENCIL_BACK_WRITEMASK: number;
SRC_ALPHA: number;
UNSIGNED_SHORT: number;
TEXTURE21: number;
FUNC_REVERSE_SUBTRACT: number;
SHADING_LANGUAGE_VERSION: number;
EQUAL: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
BOOL_VEC3: number;
SAMPLER_2D: number;
TEXTURE_CUBE_MAP_NEGATIVE_X: number;
MAX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_CUBE_MAP_POSITIVE_Y: number;
RENDERBUFFER_INTERNAL_FORMAT: number;
STENCIL_VALUE_MASK: number;
ELEMENT_ARRAY_BUFFER_BINDING: number;
ARRAY_BUFFER: number;
DEPTH_RANGE: number;
NICEST: number;
ACTIVE_ATTRIBUTES: number;
NEVER: number;
FLOAT_VEC4: number;
CURRENT_VERTEX_ATTRIB: number;
STENCIL_PASS_DEPTH_PASS: number;
INVERT: number;
LINK_STATUS: number;
RGB: number;
INT_VEC4: number;
TEXTURE2: number;
UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
MEDIUM_FLOAT: number;
SRC_ALPHA_SATURATE: number;
BUFFER_USAGE: number;
SHORT: number;
NONE: number;
UNSIGNED_BYTE: number;
INT: number;
SUBPIXEL_BITS: number;
KEEP: number;
SAMPLES: number;
FRAGMENT_SHADER: number;
LINE_WIDTH: number;
BLEND_SRC_RGB: number;
LOW_FLOAT: number;
VERSION: number;
}
declare var WebGLRenderingContext: {
prototype: WebGLRenderingContext;
new(): WebGLRenderingContext;
DEPTH_FUNC: number;
DEPTH_COMPONENT16: number;
REPLACE: number;
REPEAT: number;
VERTEX_ATTRIB_ARRAY_ENABLED: number;
FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
STENCIL_BUFFER_BIT: number;
RENDERER: number;
STENCIL_BACK_REF: number;
TEXTURE26: number;
RGB565: number;
DITHER: number;
CONSTANT_COLOR: number;
GENERATE_MIPMAP_HINT: number;
POINTS: number;
DECR: number;
INT_VEC3: number;
TEXTURE28: number;
ONE_MINUS_CONSTANT_ALPHA: number;
BACK: number;
RENDERBUFFER_STENCIL_SIZE: number;
UNPACK_FLIP_Y_WEBGL: number;
BLEND: number;
TEXTURE9: number;
ARRAY_BUFFER_BINDING: number;
MAX_VIEWPORT_DIMS: number;
INVALID_FRAMEBUFFER_OPERATION: number;
TEXTURE: number;
TEXTURE0: number;
TEXTURE31: number;
TEXTURE24: number;
HIGH_INT: number;
RENDERBUFFER_BINDING: number;
BLEND_COLOR: number;
FASTEST: number;
STENCIL_WRITEMASK: number;
ALIASED_POINT_SIZE_RANGE: number;
TEXTURE12: number;
DST_ALPHA: number;
BLEND_EQUATION_RGB: number;
FRAMEBUFFER_COMPLETE: number;
NEAREST_MIPMAP_NEAREST: number;
VERTEX_ATTRIB_ARRAY_SIZE: number;
TEXTURE3: number;
DEPTH_WRITEMASK: number;
CONTEXT_LOST_WEBGL: number;
INVALID_VALUE: number;
TEXTURE_MAG_FILTER: number;
ONE_MINUS_CONSTANT_COLOR: number;
ONE_MINUS_SRC_ALPHA: number;
TEXTURE_CUBE_MAP_POSITIVE_Z: number;
NOTEQUAL: number;
ALPHA: number;
DEPTH_STENCIL: number;
MAX_VERTEX_UNIFORM_VECTORS: number;
DEPTH_COMPONENT: number;
RENDERBUFFER_RED_SIZE: number;
TEXTURE20: number;
RED_BITS: number;
RENDERBUFFER_BLUE_SIZE: number;
SCISSOR_BOX: number;
VENDOR: number;
FRONT_AND_BACK: number;
CONSTANT_ALPHA: number;
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
NEAREST: number;
CULL_FACE: number;
ALIASED_LINE_WIDTH_RANGE: number;
TEXTURE19: number;
FRONT: number;
DEPTH_CLEAR_VALUE: number;
GREEN_BITS: number;
TEXTURE29: number;
TEXTURE23: number;
MAX_RENDERBUFFER_SIZE: number;
STENCIL_ATTACHMENT: number;
TEXTURE27: number;
BOOL_VEC2: number;
OUT_OF_MEMORY: number;
MIRRORED_REPEAT: number;
POLYGON_OFFSET_UNITS: number;
TEXTURE_MIN_FILTER: number;
STENCIL_BACK_PASS_DEPTH_PASS: number;
LINE_LOOP: number;
FLOAT_MAT3: number;
TEXTURE14: number;
LINEAR: number;
RGB5_A1: number;
ONE_MINUS_SRC_COLOR: number;
SAMPLE_COVERAGE_INVERT: number;
DONT_CARE: number;
FRAMEBUFFER_BINDING: number;
RENDERBUFFER_ALPHA_SIZE: number;
STENCIL_REF: number;
ZERO: number;
DECR_WRAP: number;
SAMPLE_COVERAGE: number;
STENCIL_BACK_FUNC: number;
TEXTURE30: number;
VIEWPORT: number;
STENCIL_BITS: number;
FLOAT: number;
COLOR_WRITEMASK: number;
SAMPLE_COVERAGE_VALUE: number;
TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
STENCIL_BACK_FAIL: number;
FLOAT_MAT4: number;
UNSIGNED_SHORT_4_4_4_4: number;
TEXTURE6: number;
RENDERBUFFER_WIDTH: number;
RGBA4: number;
ALWAYS: number;
BLEND_EQUATION_ALPHA: number;
COLOR_BUFFER_BIT: number;
TEXTURE_CUBE_MAP: number;
DEPTH_BUFFER_BIT: number;
STENCIL_CLEAR_VALUE: number;
BLEND_EQUATION: number;
RENDERBUFFER_GREEN_SIZE: number;
NEAREST_MIPMAP_LINEAR: number;
VERTEX_ATTRIB_ARRAY_TYPE: number;
INCR_WRAP: number;
ONE_MINUS_DST_COLOR: number;
HIGH_FLOAT: number;
BYTE: number;
FRONT_FACE: number;
SAMPLE_ALPHA_TO_COVERAGE: number;
CCW: number;
TEXTURE13: number;
MAX_VERTEX_ATTRIBS: number;
MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_WRAP_T: number;
UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
FLOAT_VEC2: number;
LUMINANCE: number;
GREATER: number;
INT_VEC2: number;
VALIDATE_STATUS: number;
FRAMEBUFFER: number;
FRAMEBUFFER_UNSUPPORTED: number;
TEXTURE5: number;
FUNC_SUBTRACT: number;
BLEND_DST_ALPHA: number;
SAMPLER_CUBE: number;
ONE_MINUS_DST_ALPHA: number;
LESS: number;
TEXTURE_CUBE_MAP_POSITIVE_X: number;
BLUE_BITS: number;
DEPTH_TEST: number;
VERTEX_ATTRIB_ARRAY_STRIDE: number;
DELETE_STATUS: number;
TEXTURE18: number;
POLYGON_OFFSET_FACTOR: number;
UNSIGNED_INT: number;
TEXTURE_2D: number;
DST_COLOR: number;
FLOAT_MAT2: number;
COMPRESSED_TEXTURE_FORMATS: number;
MAX_FRAGMENT_UNIFORM_VECTORS: number;
DEPTH_STENCIL_ATTACHMENT: number;
LUMINANCE_ALPHA: number;
CW: number;
VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
LINEAR_MIPMAP_LINEAR: number;
BUFFER_SIZE: number;
SAMPLE_BUFFERS: number;
TEXTURE15: number;
ACTIVE_TEXTURE: number;
VERTEX_SHADER: number;
TEXTURE22: number;
VERTEX_ATTRIB_ARRAY_POINTER: number;
INCR: number;
COMPILE_STATUS: number;
MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
TEXTURE7: number;
UNSIGNED_SHORT_5_5_5_1: number;
DEPTH_BITS: number;
RGBA: number;
TRIANGLE_STRIP: number;
COLOR_CLEAR_VALUE: number;
BROWSER_DEFAULT_WEBGL: number;
INVALID_ENUM: number;
SCISSOR_TEST: number;
LINE_STRIP: number;
FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
STENCIL_FUNC: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
RENDERBUFFER_HEIGHT: number;
TEXTURE8: number;
TRIANGLES: number;
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
STENCIL_BACK_VALUE_MASK: number;
TEXTURE25: number;
RENDERBUFFER: number;
LEQUAL: number;
TEXTURE1: number;
STENCIL_INDEX8: number;
FUNC_ADD: number;
STENCIL_FAIL: number;
BLEND_SRC_ALPHA: number;
BOOL: number;
ALPHA_BITS: number;
LOW_INT: number;
TEXTURE10: number;
SRC_COLOR: number;
MAX_VARYING_VECTORS: number;
BLEND_DST_RGB: number;
TEXTURE_BINDING_CUBE_MAP: number;
STENCIL_INDEX: number;
TEXTURE_BINDING_2D: number;
MEDIUM_INT: number;
SHADER_TYPE: number;
POLYGON_OFFSET_FILL: number;
DYNAMIC_DRAW: number;
TEXTURE4: number;
STENCIL_BACK_PASS_DEPTH_FAIL: number;
STREAM_DRAW: number;
MAX_CUBE_MAP_TEXTURE_SIZE: number;
TEXTURE17: number;
TRIANGLE_FAN: number;
UNPACK_ALIGNMENT: number;
CURRENT_PROGRAM: number;
LINES: number;
INVALID_OPERATION: number;
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
LINEAR_MIPMAP_NEAREST: number;
CLAMP_TO_EDGE: number;
RENDERBUFFER_DEPTH_SIZE: number;
TEXTURE_WRAP_S: number;
ELEMENT_ARRAY_BUFFER: number;
UNSIGNED_SHORT_5_6_5: number;
ACTIVE_UNIFORMS: number;
FLOAT_VEC3: number;
NO_ERROR: number;
ATTACHED_SHADERS: number;
DEPTH_ATTACHMENT: number;
TEXTURE11: number;
STENCIL_TEST: number;
ONE: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
STATIC_DRAW: number;
GEQUAL: number;
BOOL_VEC4: number;
COLOR_ATTACHMENT0: number;
PACK_ALIGNMENT: number;
MAX_TEXTURE_SIZE: number;
STENCIL_PASS_DEPTH_FAIL: number;
CULL_FACE_MODE: number;
TEXTURE16: number;
STENCIL_BACK_WRITEMASK: number;
SRC_ALPHA: number;
UNSIGNED_SHORT: number;
TEXTURE21: number;
FUNC_REVERSE_SUBTRACT: number;
SHADING_LANGUAGE_VERSION: number;
EQUAL: number;
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
BOOL_VEC3: number;
SAMPLER_2D: number;
TEXTURE_CUBE_MAP_NEGATIVE_X: number;
MAX_TEXTURE_IMAGE_UNITS: number;
TEXTURE_CUBE_MAP_POSITIVE_Y: number;
RENDERBUFFER_INTERNAL_FORMAT: number;
STENCIL_VALUE_MASK: number;
ELEMENT_ARRAY_BUFFER_BINDING: number;
ARRAY_BUFFER: number;
DEPTH_RANGE: number;
NICEST: number;
ACTIVE_ATTRIBUTES: number;
NEVER: number;
FLOAT_VEC4: number;
CURRENT_VERTEX_ATTRIB: number;
STENCIL_PASS_DEPTH_PASS: number;
INVERT: number;
LINK_STATUS: number;
RGB: number;
INT_VEC4: number;
TEXTURE2: number;
UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
MEDIUM_FLOAT: number;
SRC_ALPHA_SATURATE: number;
BUFFER_USAGE: number;
SHORT: number;
NONE: number;
UNSIGNED_BYTE: number;
INT: number;
SUBPIXEL_BITS: number;
KEEP: number;
SAMPLES: number;
FRAGMENT_SHADER: number;
LINE_WIDTH: number;
BLEND_SRC_RGB: number;
LOW_FLOAT: number;
VERSION: number;
}
interface WebGLProgram extends WebGLObject {
}
declare var WebGLProgram: {
prototype: WebGLProgram;
new(): WebGLProgram;
}
interface OES_standard_derivatives {
FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
}
declare var OES_standard_derivatives: {
prototype: OES_standard_derivatives;
new(): OES_standard_derivatives;
FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
}
interface WebGLFramebuffer extends WebGLObject {
}
declare var WebGLFramebuffer: {
prototype: WebGLFramebuffer;
new(): WebGLFramebuffer;
}
interface WebGLShader extends WebGLObject {
}
declare var WebGLShader: {
prototype: WebGLShader;
new(): WebGLShader;
}
interface OES_texture_float_linear {
}
declare var OES_texture_float_linear: {
prototype: OES_texture_float_linear;
new(): OES_texture_float_linear;
}
interface WebGLObject {
}
declare var WebGLObject: {
prototype: WebGLObject;
new(): WebGLObject;
}
interface WebGLBuffer extends WebGLObject {
}
declare var WebGLBuffer: {
prototype: WebGLBuffer;
new(): WebGLBuffer;
}
interface WebGLShaderPrecisionFormat {
rangeMin: number;
rangeMax: number;
precision: number;
}
declare var WebGLShaderPrecisionFormat: {
prototype: WebGLShaderPrecisionFormat;
new(): WebGLShaderPrecisionFormat;
}
interface EXT_texture_filter_anisotropic {
TEXTURE_MAX_ANISOTROPY_EXT: number;
MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
}
declare var EXT_texture_filter_anisotropic: {
prototype: EXT_texture_filter_anisotropic;
new(): EXT_texture_filter_anisotropic;
TEXTURE_MAX_ANISOTROPY_EXT: number;
MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
}
declare var Option: { new(text?: string, value?: string, defaultSelected?: boolean, selected?:boolean): HTMLOptionElement; };
declare var Image: { new(width?: number, height?: number): HTMLImageElement; };
declare var Audio: { new(src?: string): HTMLAudioElement; };
declare var ondragend: (ev: DragEvent) => any;
declare var onkeydown: (ev: KeyboardEvent) => any;
declare var ondragover: (ev: DragEvent) => any;
declare var onkeyup: (ev: KeyboardEvent) => any;
declare var onreset: (ev: Event) => any;
declare var onmouseup: (ev: MouseEvent) => any;
declare var ondragstart: (ev: DragEvent) => any;
declare var ondrag: (ev: DragEvent) => any;
declare var screenX: number;
declare var onmouseover: (ev: MouseEvent) => any;
declare var ondragleave: (ev: DragEvent) => any;
declare var history: History;
declare var pageXOffset: number;
declare var name: string;
declare var onafterprint: (ev: Event) => any;
declare var onpause: (ev: Event) => any;
declare var onbeforeprint: (ev: Event) => any;
declare var top: Window;
declare var onmousedown: (ev: MouseEvent) => any;
declare var onseeked: (ev: Event) => any;
declare var opener: Window;
declare var onclick: (ev: MouseEvent) => any;
declare var innerHeight: number;
declare var onwaiting: (ev: Event) => any;
declare var ononline: (ev: Event) => any;
declare var ondurationchange: (ev: Event) => any;
declare var frames: Window;
declare var onblur: (ev: FocusEvent) => any;
declare var onemptied: (ev: Event) => any;
declare var onseeking: (ev: Event) => any;
declare var oncanplay: (ev: Event) => any;
declare var outerWidth: number;
declare var onstalled: (ev: Event) => any;
declare var onmousemove: (ev: MouseEvent) => any;
declare var innerWidth: number;
declare var onoffline: (ev: Event) => any;
declare var length: number;
declare var screen: Screen;
declare var onbeforeunload: (ev: BeforeUnloadEvent) => any;
declare var onratechange: (ev: Event) => any;
declare var onstorage: (ev: StorageEvent) => any;
declare var onloadstart: (ev: Event) => any;
declare var ondragenter: (ev: DragEvent) => any;
declare var onsubmit: (ev: Event) => any;
declare var self: Window;
declare var document: Document;
declare var onprogress: (ev: ProgressEvent) => any;
declare var ondblclick: (ev: MouseEvent) => any;
declare var pageYOffset: number;
declare var oncontextmenu: (ev: MouseEvent) => any;
declare var onchange: (ev: Event) => any;
declare var onloadedmetadata: (ev: Event) => any;
declare var onplay: (ev: Event) => any;
declare var onerror: ErrorEventHandler;
declare var onplaying: (ev: Event) => any;
declare var parent: Window;
declare var location: Location;
declare var oncanplaythrough: (ev: Event) => any;
declare var onabort: (ev: UIEvent) => any;
declare var onreadystatechange: (ev: Event) => any;
declare var outerHeight: number;
declare var onkeypress: (ev: KeyboardEvent) => any;
declare var frameElement: Element;
declare var onloadeddata: (ev: Event) => any;
declare var onsuspend: (ev: Event) => any;
declare var window: Window;
declare var onfocus: (ev: FocusEvent) => any;
declare var onmessage: (ev: MessageEvent) => any;
declare var ontimeupdate: (ev: Event) => any;
declare var onresize: (ev: UIEvent) => any;
declare var onselect: (ev: UIEvent) => any;
declare var navigator: Navigator;
declare var styleMedia: StyleMedia;
declare var ondrop: (ev: DragEvent) => any;
declare var onmouseout: (ev: MouseEvent) => any;
declare var onended: (ev: Event) => any;
declare var onhashchange: (ev: Event) => any;
declare var onunload: (ev: Event) => any;
declare var onscroll: (ev: UIEvent) => any;
declare var screenY: number;
declare var onmousewheel: (ev: MouseWheelEvent) => any;
declare var onload: (ev: Event) => any;
declare var onvolumechange: (ev: Event) => any;
declare var oninput: (ev: Event) => any;
declare var performance: Performance;
declare var onmspointerdown: (ev: any) => any;
declare var animationStartTime: number;
declare var onmsgesturedoubletap: (ev: any) => any;
declare var onmspointerhover: (ev: any) => any;
declare var onmsgesturehold: (ev: any) => any;
declare var onmspointermove: (ev: any) => any;
declare var onmsgesturechange: (ev: any) => any;
declare var onmsgesturestart: (ev: any) => any;
declare var onmspointercancel: (ev: any) => any;
declare var onmsgestureend: (ev: any) => any;
declare var onmsgesturetap: (ev: any) => any;
declare var onmspointerout: (ev: any) => any;
declare var msAnimationStartTime: number;
declare var applicationCache: ApplicationCache;
declare var onmsinertiastart: (ev: any) => any;
declare var onmspointerover: (ev: any) => any;
declare var onpopstate: (ev: PopStateEvent) => any;
declare var onmspointerup: (ev: any) => any;
declare var onpageshow: (ev: PageTransitionEvent) => any;
declare var ondevicemotion: (ev: DeviceMotionEvent) => any;
declare var devicePixelRatio: number;
declare var msCrypto: Crypto;
declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any;
declare var doNotTrack: string;
declare var onmspointerenter: (ev: any) => any;
declare var onpagehide: (ev: PageTransitionEvent) => any;
declare var onmspointerleave: (ev: any) => any;
declare function alert(message?: any): void;
declare function scroll(x?: number, y?: number): void;
declare function focus(): void;
declare function scrollTo(x?: number, y?: number): void;
declare function print(): void;
declare function prompt(message?: string, _default?: string): string;
declare function toString(): string;
declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window;
declare function scrollBy(x?: number, y?: number): void;
declare function confirm(message?: string): boolean;
declare function close(): void;
declare function postMessage(message: any, targetOrigin: string, ports?: any): void;
declare function showModalDialog(url?: string, argument?: any, options?: any): any;
declare function blur(): void;
declare function getSelection(): Selection;
declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
declare function msCancelRequestAnimationFrame(handle: number): void;
declare function matchMedia(mediaQuery: string): MediaQueryList;
declare function cancelAnimationFrame(handle: number): void;
declare function msIsStaticHTML(html: string): boolean;
declare function msMatchMedia(mediaQuery: string): MediaQueryList;
declare function requestAnimationFrame(callback: FrameRequestCallback): number;
declare function msRequestAnimationFrame(callback: FrameRequestCallback): number;
declare function removeEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
declare function dispatchEvent(evt: Event): boolean;
declare function attachEvent(event: string, listener: EventListener): boolean;
declare function detachEvent(event: string, listener: EventListener): void;
declare var localStorage: Storage;
declare var status: string;
declare var onmouseleave: (ev: MouseEvent) => any;
declare var screenLeft: number;
declare var offscreenBuffering: any;
declare var maxConnectionsPerServer: number;
declare var onmouseenter: (ev: MouseEvent) => any;
declare var clipboardData: DataTransfer;
declare var defaultStatus: string;
declare var clientInformation: Navigator;
declare var closed: boolean;
declare var onhelp: (ev: Event) => any;
declare var external: External;
declare var event: MSEventObj;
declare var onfocusout: (ev: FocusEvent) => any;
declare var screenTop: number;
declare var onfocusin: (ev: FocusEvent) => any;
declare function showModelessDialog(url?: string, argument?: any, options?: any): Window;
declare function navigate(url: string): void;
declare function resizeBy(x?: number, y?: number): void;
declare function item(index: any): any;
declare function resizeTo(x?: number, y?: number): void;
declare function createPopup(arguments?: any): MSPopupWindow;
declare function toStaticHTML(html: string): string;
declare function execScript(code: string, language?: string): any;
declare function msWriteProfilerMark(profilerMarkName: string): void;
declare function moveTo(x?: number, y?: number): void;
declare function moveBy(x?: number, y?: number): void;
declare function showHelp(url: string, helpArg?: any, features?: string): void;
declare function captureEvents(): void;
declare function releaseEvents(): void;
declare var sessionStorage: Storage;
declare function clearTimeout(handle: number): void;
declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
declare function clearInterval(handle: number): void;
declare function setInterval(handler: any, timeout?: any, ...args: any[]): number;
declare function msSetImmediate(expression: any, ...args: any[]): number;
declare function clearImmediate(handle: number): void;
declare function msClearImmediate(handle: number): void;
declare function setImmediate(expression: any, ...args: any[]): number;
declare function btoa(rawString: string): string;
declare function atob(encodedString: string): string;
declare var msIndexedDB: IDBFactory;
declare var indexedDB: IDBFactory;
declare var console: Console;
declare var onpointerenter: (ev: PointerEvent) => any;
declare var onpointerout: (ev: PointerEvent) => any;
declare var onpointerdown: (ev: PointerEvent) => any;
declare var onpointerup: (ev: PointerEvent) => any;
declare var onpointercancel: (ev: PointerEvent) => any;
declare var onpointerover: (ev: PointerEvent) => any;
declare var onpointermove: (ev: PointerEvent) => any;
declare var onpointerleave: (ev: PointerEvent) => any;
declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "help", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "contextmenu", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "readystatechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "hashchange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerdown", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturedoubletap", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerhover", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturehold", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointermove", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturechange", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturestart", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointercancel", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgestureend", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msgesturetap", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerout", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "msinertiastart", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerover", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerup", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerenter", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
declare function addEventListener(type: "mspointerleave", listener: (ev: any) => any, useCapture?: boolean): void;
declare function addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
typescriptServices.js/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
var ts;
(function (ts) {
(function (SyntaxKind) {
SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown";
SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken";
SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 2] = "SingleLineCommentTrivia";
SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 3] = "MultiLineCommentTrivia";
SyntaxKind[SyntaxKind["NewLineTrivia"] = 4] = "NewLineTrivia";
SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 5] = "WhitespaceTrivia";
SyntaxKind[SyntaxKind["ConflictMarkerTrivia"] = 6] = "ConflictMarkerTrivia";
SyntaxKind[SyntaxKind["NumericLiteral"] = 7] = "NumericLiteral";
SyntaxKind[SyntaxKind["StringLiteral"] = 8] = "StringLiteral";
SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 9] = "RegularExpressionLiteral";
SyntaxKind[SyntaxKind["NoSubstitutionTemplateLiteral"] = 10] = "NoSubstitutionTemplateLiteral";
SyntaxKind[SyntaxKind["TemplateHead"] = 11] = "TemplateHead";
SyntaxKind[SyntaxKind["TemplateMiddle"] = 12] = "TemplateMiddle";
SyntaxKind[SyntaxKind["TemplateTail"] = 13] = "TemplateTail";
SyntaxKind[SyntaxKind["OpenBraceToken"] = 14] = "OpenBraceToken";
SyntaxKind[SyntaxKind["CloseBraceToken"] = 15] = "CloseBraceToken";
SyntaxKind[SyntaxKind["OpenParenToken"] = 16] = "OpenParenToken";
SyntaxKind[SyntaxKind["CloseParenToken"] = 17] = "CloseParenToken";
SyntaxKind[SyntaxKind["OpenBracketToken"] = 18] = "OpenBracketToken";
SyntaxKind[SyntaxKind["CloseBracketToken"] = 19] = "CloseBracketToken";
SyntaxKind[SyntaxKind["DotToken"] = 20] = "DotToken";
SyntaxKind[SyntaxKind["DotDotDotToken"] = 21] = "DotDotDotToken";
SyntaxKind[SyntaxKind["SemicolonToken"] = 22] = "SemicolonToken";
SyntaxKind[SyntaxKind["CommaToken"] = 23] = "CommaToken";
SyntaxKind[SyntaxKind["LessThanToken"] = 24] = "LessThanToken";
SyntaxKind[SyntaxKind["GreaterThanToken"] = 25] = "GreaterThanToken";
SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 26] = "LessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 27] = "GreaterThanEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 28] = "EqualsEqualsToken";
SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 29] = "ExclamationEqualsToken";
SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 30] = "EqualsEqualsEqualsToken";
SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 31] = "ExclamationEqualsEqualsToken";
SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 32] = "EqualsGreaterThanToken";
SyntaxKind[SyntaxKind["PlusToken"] = 33] = "PlusToken";
SyntaxKind[SyntaxKind["MinusToken"] = 34] = "MinusToken";
SyntaxKind[SyntaxKind["AsteriskToken"] = 35] = "AsteriskToken";
SyntaxKind[SyntaxKind["SlashToken"] = 36] = "SlashToken";
SyntaxKind[SyntaxKind["PercentToken"] = 37] = "PercentToken";
SyntaxKind[SyntaxKind["PlusPlusToken"] = 38] = "PlusPlusToken";
SyntaxKind[SyntaxKind["MinusMinusToken"] = 39] = "MinusMinusToken";
SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 40] = "LessThanLessThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 41] = "GreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 42] = "GreaterThanGreaterThanGreaterThanToken";
SyntaxKind[SyntaxKind["AmpersandToken"] = 43] = "AmpersandToken";
SyntaxKind[SyntaxKind["BarToken"] = 44] = "BarToken";
SyntaxKind[SyntaxKind["CaretToken"] = 45] = "CaretToken";
SyntaxKind[SyntaxKind["ExclamationToken"] = 46] = "ExclamationToken";
SyntaxKind[SyntaxKind["TildeToken"] = 47] = "TildeToken";
SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 48] = "AmpersandAmpersandToken";
SyntaxKind[SyntaxKind["BarBarToken"] = 49] = "BarBarToken";
SyntaxKind[SyntaxKind["QuestionToken"] = 50] = "QuestionToken";
SyntaxKind[SyntaxKind["ColonToken"] = 51] = "ColonToken";
SyntaxKind[SyntaxKind["EqualsToken"] = 52] = "EqualsToken";
SyntaxKind[SyntaxKind["PlusEqualsToken"] = 53] = "PlusEqualsToken";
SyntaxKind[SyntaxKind["MinusEqualsToken"] = 54] = "MinusEqualsToken";
SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 55] = "AsteriskEqualsToken";
SyntaxKind[SyntaxKind["SlashEqualsToken"] = 56] = "SlashEqualsToken";
SyntaxKind[SyntaxKind["PercentEqualsToken"] = 57] = "PercentEqualsToken";
SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 58] = "LessThanLessThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 59] = "GreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 60] = "GreaterThanGreaterThanGreaterThanEqualsToken";
SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 61] = "AmpersandEqualsToken";
SyntaxKind[SyntaxKind["BarEqualsToken"] = 62] = "BarEqualsToken";
SyntaxKind[SyntaxKind["CaretEqualsToken"] = 63] = "CaretEqualsToken";
SyntaxKind[SyntaxKind["Identifier"] = 64] = "Identifier";
SyntaxKind[SyntaxKind["BreakKeyword"] = 65] = "BreakKeyword";
SyntaxKind[SyntaxKind["CaseKeyword"] = 66] = "CaseKeyword";
SyntaxKind[SyntaxKind["CatchKeyword"] = 67] = "CatchKeyword";
SyntaxKind[SyntaxKind["ClassKeyword"] = 68] = "ClassKeyword";
SyntaxKind[SyntaxKind["ConstKeyword"] = 69] = "ConstKeyword";
SyntaxKind[SyntaxKind["ContinueKeyword"] = 70] = "ContinueKeyword";
SyntaxKind[SyntaxKind["DebuggerKeyword"] = 71] = "DebuggerKeyword";
SyntaxKind[SyntaxKind["DefaultKeyword"] = 72] = "DefaultKeyword";
SyntaxKind[SyntaxKind["DeleteKeyword"] = 73] = "DeleteKeyword";
SyntaxKind[SyntaxKind["DoKeyword"] = 74] = "DoKeyword";
SyntaxKind[SyntaxKind["ElseKeyword"] = 75] = "ElseKeyword";
SyntaxKind[SyntaxKind["EnumKeyword"] = 76] = "EnumKeyword";
SyntaxKind[SyntaxKind["ExportKeyword"] = 77] = "ExportKeyword";
SyntaxKind[SyntaxKind["ExtendsKeyword"] = 78] = "ExtendsKeyword";
SyntaxKind[SyntaxKind["FalseKeyword"] = 79] = "FalseKeyword";
SyntaxKind[SyntaxKind["FinallyKeyword"] = 80] = "FinallyKeyword";
SyntaxKind[SyntaxKind["ForKeyword"] = 81] = "ForKeyword";
SyntaxKind[SyntaxKind["FunctionKeyword"] = 82] = "FunctionKeyword";
SyntaxKind[SyntaxKind["IfKeyword"] = 83] = "IfKeyword";
SyntaxKind[SyntaxKind["ImportKeyword"] = 84] = "ImportKeyword";
SyntaxKind[SyntaxKind["InKeyword"] = 85] = "InKeyword";
SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 86] = "InstanceOfKeyword";
SyntaxKind[SyntaxKind["NewKeyword"] = 87] = "NewKeyword";
SyntaxKind[SyntaxKind["NullKeyword"] = 88] = "NullKeyword";
SyntaxKind[SyntaxKind["ReturnKeyword"] = 89] = "ReturnKeyword";
SyntaxKind[SyntaxKind["SuperKeyword"] = 90] = "SuperKeyword";
SyntaxKind[SyntaxKind["SwitchKeyword"] = 91] = "SwitchKeyword";
SyntaxKind[SyntaxKind["ThisKeyword"] = 92] = "ThisKeyword";
SyntaxKind[SyntaxKind["ThrowKeyword"] = 93] = "ThrowKeyword";
SyntaxKind[SyntaxKind["TrueKeyword"] = 94] = "TrueKeyword";
SyntaxKind[SyntaxKind["TryKeyword"] = 95] = "TryKeyword";
SyntaxKind[SyntaxKind["TypeOfKeyword"] = 96] = "TypeOfKeyword";
SyntaxKind[SyntaxKind["VarKeyword"] = 97] = "VarKeyword";
SyntaxKind[SyntaxKind["VoidKeyword"] = 98] = "VoidKeyword";
SyntaxKind[SyntaxKind["WhileKeyword"] = 99] = "WhileKeyword";
SyntaxKind[SyntaxKind["WithKeyword"] = 100] = "WithKeyword";
SyntaxKind[SyntaxKind["ImplementsKeyword"] = 101] = "ImplementsKeyword";
SyntaxKind[SyntaxKind["InterfaceKeyword"] = 102] = "InterfaceKeyword";
SyntaxKind[SyntaxKind["LetKeyword"] = 103] = "LetKeyword";
SyntaxKind[SyntaxKind["PackageKeyword"] = 104] = "PackageKeyword";
SyntaxKind[SyntaxKind["PrivateKeyword"] = 105] = "PrivateKeyword";
SyntaxKind[SyntaxKind["ProtectedKeyword"] = 106] = "ProtectedKeyword";
SyntaxKind[SyntaxKind["PublicKeyword"] = 107] = "PublicKeyword";
SyntaxKind[SyntaxKind["StaticKeyword"] = 108] = "StaticKeyword";
SyntaxKind[SyntaxKind["YieldKeyword"] = 109] = "YieldKeyword";
SyntaxKind[SyntaxKind["AnyKeyword"] = 110] = "AnyKeyword";
SyntaxKind[SyntaxKind["BooleanKeyword"] = 111] = "BooleanKeyword";
SyntaxKind[SyntaxKind["ConstructorKeyword"] = 112] = "ConstructorKeyword";
SyntaxKind[SyntaxKind["DeclareKeyword"] = 113] = "DeclareKeyword";
SyntaxKind[SyntaxKind["GetKeyword"] = 114] = "GetKeyword";
SyntaxKind[SyntaxKind["ModuleKeyword"] = 115] = "ModuleKeyword";
SyntaxKind[SyntaxKind["RequireKeyword"] = 116] = "RequireKeyword";
SyntaxKind[SyntaxKind["NumberKeyword"] = 117] = "NumberKeyword";
SyntaxKind[SyntaxKind["SetKeyword"] = 118] = "SetKeyword";
SyntaxKind[SyntaxKind["StringKeyword"] = 119] = "StringKeyword";
SyntaxKind[SyntaxKind["SymbolKeyword"] = 120] = "SymbolKeyword";
SyntaxKind[SyntaxKind["TypeKeyword"] = 121] = "TypeKeyword";
SyntaxKind[SyntaxKind["OfKeyword"] = 122] = "OfKeyword";
SyntaxKind[SyntaxKind["QualifiedName"] = 123] = "QualifiedName";
SyntaxKind[SyntaxKind["ComputedPropertyName"] = 124] = "ComputedPropertyName";
SyntaxKind[SyntaxKind["TypeParameter"] = 125] = "TypeParameter";
SyntaxKind[SyntaxKind["Parameter"] = 126] = "Parameter";
SyntaxKind[SyntaxKind["PropertySignature"] = 127] = "PropertySignature";
SyntaxKind[SyntaxKind["PropertyDeclaration"] = 128] = "PropertyDeclaration";
SyntaxKind[SyntaxKind["MethodSignature"] = 129] = "MethodSignature";
SyntaxKind[SyntaxKind["MethodDeclaration"] = 130] = "MethodDeclaration";
SyntaxKind[SyntaxKind["Constructor"] = 131] = "Constructor";
SyntaxKind[SyntaxKind["GetAccessor"] = 132] = "GetAccessor";
SyntaxKind[SyntaxKind["SetAccessor"] = 133] = "SetAccessor";
SyntaxKind[SyntaxKind["CallSignature"] = 134] = "CallSignature";
SyntaxKind[SyntaxKind["ConstructSignature"] = 135] = "ConstructSignature";
SyntaxKind[SyntaxKind["IndexSignature"] = 136] = "IndexSignature";
SyntaxKind[SyntaxKind["TypeReference"] = 137] = "TypeReference";
SyntaxKind[SyntaxKind["FunctionType"] = 138] = "FunctionType";
SyntaxKind[SyntaxKind["ConstructorType"] = 139] = "ConstructorType";
SyntaxKind[SyntaxKind["TypeQuery"] = 140] = "TypeQuery";
SyntaxKind[SyntaxKind["TypeLiteral"] = 141] = "TypeLiteral";
SyntaxKind[SyntaxKind["ArrayType"] = 142] = "ArrayType";
SyntaxKind[SyntaxKind["TupleType"] = 143] = "TupleType";
SyntaxKind[SyntaxKind["UnionType"] = 144] = "UnionType";
SyntaxKind[SyntaxKind["ParenthesizedType"] = 145] = "ParenthesizedType";
SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 146] = "ObjectBindingPattern";
SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 147] = "ArrayBindingPattern";
SyntaxKind[SyntaxKind["BindingElement"] = 148] = "BindingElement";
SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 149] = "ArrayLiteralExpression";
SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 150] = "ObjectLiteralExpression";
SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 151] = "PropertyAccessExpression";
SyntaxKind[SyntaxKind["ElementAccessExpression"] = 152] = "ElementAccessExpression";
SyntaxKind[SyntaxKind["CallExpression"] = 153] = "CallExpression";
SyntaxKind[SyntaxKind["NewExpression"] = 154] = "NewExpression";
SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 155] = "TaggedTemplateExpression";
SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 156] = "TypeAssertionExpression";
SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 157] = "ParenthesizedExpression";
SyntaxKind[SyntaxKind["FunctionExpression"] = 158] = "FunctionExpression";
SyntaxKind[SyntaxKind["ArrowFunction"] = 159] = "ArrowFunction";
SyntaxKind[SyntaxKind["DeleteExpression"] = 160] = "DeleteExpression";
SyntaxKind[SyntaxKind["TypeOfExpression"] = 161] = "TypeOfExpression";
SyntaxKind[SyntaxKind["VoidExpression"] = 162] = "VoidExpression";
SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 163] = "PrefixUnaryExpression";
SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 164] = "PostfixUnaryExpression";
SyntaxKind[SyntaxKind["BinaryExpression"] = 165] = "BinaryExpression";
SyntaxKind[SyntaxKind["ConditionalExpression"] = 166] = "ConditionalExpression";
SyntaxKind[SyntaxKind["TemplateExpression"] = 167] = "TemplateExpression";
SyntaxKind[SyntaxKind["YieldExpression"] = 168] = "YieldExpression";
SyntaxKind[SyntaxKind["SpreadElementExpression"] = 169] = "SpreadElementExpression";
SyntaxKind[SyntaxKind["OmittedExpression"] = 170] = "OmittedExpression";
SyntaxKind[SyntaxKind["TemplateSpan"] = 171] = "TemplateSpan";
SyntaxKind[SyntaxKind["Block"] = 172] = "Block";
SyntaxKind[SyntaxKind["VariableStatement"] = 173] = "VariableStatement";
SyntaxKind[SyntaxKind["EmptyStatement"] = 174] = "EmptyStatement";
SyntaxKind[SyntaxKind["ExpressionStatement"] = 175] = "ExpressionStatement";
SyntaxKind[SyntaxKind["IfStatement"] = 176] = "IfStatement";
SyntaxKind[SyntaxKind["DoStatement"] = 177] = "DoStatement";
SyntaxKind[SyntaxKind["WhileStatement"] = 178] = "WhileStatement";
SyntaxKind[SyntaxKind["ForStatement"] = 179] = "ForStatement";
SyntaxKind[SyntaxKind["ForInStatement"] = 180] = "ForInStatement";
SyntaxKind[SyntaxKind["ForOfStatement"] = 181] = "ForOfStatement";
SyntaxKind[SyntaxKind["ContinueStatement"] = 182] = "ContinueStatement";
SyntaxKind[SyntaxKind["BreakStatement"] = 183] = "BreakStatement";
SyntaxKind[SyntaxKind["ReturnStatement"] = 184] = "ReturnStatement";
SyntaxKind[SyntaxKind["WithStatement"] = 185] = "WithStatement";
SyntaxKind[SyntaxKind["SwitchStatement"] = 186] = "SwitchStatement";
SyntaxKind[SyntaxKind["LabeledStatement"] = 187] = "LabeledStatement";
SyntaxKind[SyntaxKind["ThrowStatement"] = 188] = "ThrowStatement";
SyntaxKind[SyntaxKind["TryStatement"] = 189] = "TryStatement";
SyntaxKind[SyntaxKind["DebuggerStatement"] = 190] = "DebuggerStatement";
SyntaxKind[SyntaxKind["VariableDeclaration"] = 191] = "VariableDeclaration";
SyntaxKind[SyntaxKind["VariableDeclarationList"] = 192] = "VariableDeclarationList";
SyntaxKind[SyntaxKind["FunctionDeclaration"] = 193] = "FunctionDeclaration";
SyntaxKind[SyntaxKind["ClassDeclaration"] = 194] = "ClassDeclaration";
SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 195] = "InterfaceDeclaration";
SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 196] = "TypeAliasDeclaration";
SyntaxKind[SyntaxKind["EnumDeclaration"] = 197] = "EnumDeclaration";
SyntaxKind[SyntaxKind["ModuleDeclaration"] = 198] = "ModuleDeclaration";
SyntaxKind[SyntaxKind["ModuleBlock"] = 199] = "ModuleBlock";
SyntaxKind[SyntaxKind["ImportDeclaration"] = 200] = "ImportDeclaration";
SyntaxKind[SyntaxKind["ExportAssignment"] = 201] = "ExportAssignment";
SyntaxKind[SyntaxKind["ExternalModuleReference"] = 202] = "ExternalModuleReference";
SyntaxKind[SyntaxKind["CaseClause"] = 203] = "CaseClause";
SyntaxKind[SyntaxKind["DefaultClause"] = 204] = "DefaultClause";
SyntaxKind[SyntaxKind["HeritageClause"] = 205] = "HeritageClause";
SyntaxKind[SyntaxKind["CatchClause"] = 206] = "CatchClause";
SyntaxKind[SyntaxKind["PropertyAssignment"] = 207] = "PropertyAssignment";
SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 208] = "ShorthandPropertyAssignment";
SyntaxKind[SyntaxKind["EnumMember"] = 209] = "EnumMember";
SyntaxKind[SyntaxKind["SourceFile"] = 210] = "SourceFile";
SyntaxKind[SyntaxKind["SyntaxList"] = 211] = "SyntaxList";
SyntaxKind[SyntaxKind["Count"] = 212] = "Count";
SyntaxKind[SyntaxKind["FirstAssignment"] = 52] = "FirstAssignment";
SyntaxKind[SyntaxKind["LastAssignment"] = 63] = "LastAssignment";
SyntaxKind[SyntaxKind["FirstReservedWord"] = 65] = "FirstReservedWord";
SyntaxKind[SyntaxKind["LastReservedWord"] = 100] = "LastReservedWord";
SyntaxKind[SyntaxKind["FirstKeyword"] = 65] = "FirstKeyword";
SyntaxKind[SyntaxKind["LastKeyword"] = 122] = "LastKeyword";
SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 101] = "FirstFutureReservedWord";
SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 109] = "LastFutureReservedWord";
SyntaxKind[SyntaxKind["FirstTypeNode"] = 137] = "FirstTypeNode";
SyntaxKind[SyntaxKind["LastTypeNode"] = 145] = "LastTypeNode";
SyntaxKind[SyntaxKind["FirstPunctuation"] = 14] = "FirstPunctuation";
SyntaxKind[SyntaxKind["LastPunctuation"] = 63] = "LastPunctuation";
SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
SyntaxKind[SyntaxKind["LastToken"] = 122] = "LastToken";
SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
SyntaxKind[SyntaxKind["LastTriviaToken"] = 6] = "LastTriviaToken";
SyntaxKind[SyntaxKind["FirstLiteralToken"] = 7] = "FirstLiteralToken";
SyntaxKind[SyntaxKind["LastLiteralToken"] = 10] = "LastLiteralToken";
SyntaxKind[SyntaxKind["FirstTemplateToken"] = 10] = "FirstTemplateToken";
SyntaxKind[SyntaxKind["LastTemplateToken"] = 13] = "LastTemplateToken";
SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 24] = "FirstBinaryOperator";
SyntaxKind[SyntaxKind["LastBinaryOperator"] = 63] = "LastBinaryOperator";
SyntaxKind[SyntaxKind["FirstNode"] = 123] = "FirstNode";
})(ts.SyntaxKind || (ts.SyntaxKind = {}));
var SyntaxKind = ts.SyntaxKind;
(function (NodeFlags) {
NodeFlags[NodeFlags["Export"] = 1] = "Export";
NodeFlags[NodeFlags["Ambient"] = 2] = "Ambient";
NodeFlags[NodeFlags["Public"] = 16] = "Public";
NodeFlags[NodeFlags["Private"] = 32] = "Private";
NodeFlags[NodeFlags["Protected"] = 64] = "Protected";
NodeFlags[NodeFlags["Static"] = 128] = "Static";
NodeFlags[NodeFlags["MultiLine"] = 256] = "MultiLine";
NodeFlags[NodeFlags["Synthetic"] = 512] = "Synthetic";
NodeFlags[NodeFlags["DeclarationFile"] = 1024] = "DeclarationFile";
NodeFlags[NodeFlags["Let"] = 2048] = "Let";
NodeFlags[NodeFlags["Const"] = 4096] = "Const";
NodeFlags[NodeFlags["OctalLiteral"] = 8192] = "OctalLiteral";
NodeFlags[NodeFlags["Modifier"] = 243] = "Modifier";
NodeFlags[NodeFlags["AccessibilityModifier"] = 112] = "AccessibilityModifier";
NodeFlags[NodeFlags["BlockScoped"] = 6144] = "BlockScoped";
})(ts.NodeFlags || (ts.NodeFlags = {}));
var NodeFlags = ts.NodeFlags;
(function (ParserContextFlags) {
ParserContextFlags[ParserContextFlags["StrictMode"] = 1] = "StrictMode";
ParserContextFlags[ParserContextFlags["DisallowIn"] = 2] = "DisallowIn";
ParserContextFlags[ParserContextFlags["Yield"] = 4] = "Yield";
ParserContextFlags[ParserContextFlags["GeneratorParameter"] = 8] = "GeneratorParameter";
ParserContextFlags[ParserContextFlags["ThisNodeHasError"] = 16] = "ThisNodeHasError";
ParserContextFlags[ParserContextFlags["ParserGeneratedFlags"] = 31] = "ParserGeneratedFlags";
ParserContextFlags[ParserContextFlags["ThisNodeOrAnySubNodesHasError"] = 32] = "ThisNodeOrAnySubNodesHasError";
ParserContextFlags[ParserContextFlags["HasAggregatedChildData"] = 64] = "HasAggregatedChildData";
})(ts.ParserContextFlags || (ts.ParserContextFlags = {}));
var ParserContextFlags = ts.ParserContextFlags;
(function (RelationComparisonResult) {
RelationComparisonResult[RelationComparisonResult["Succeeded"] = 1] = "Succeeded";
RelationComparisonResult[RelationComparisonResult["Failed"] = 2] = "Failed";
RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported";
})(ts.RelationComparisonResult || (ts.RelationComparisonResult = {}));
var RelationComparisonResult = ts.RelationComparisonResult;
(function (ExitStatus) {
ExitStatus[ExitStatus["Success"] = 0] = "Success";
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped";
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated";
})(ts.ExitStatus || (ts.ExitStatus = {}));
var ExitStatus = ts.ExitStatus;
(function (TypeFormatFlags) {
TypeFormatFlags[TypeFormatFlags["None"] = 0] = "None";
TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 1] = "WriteArrayAsGenericType";
TypeFormatFlags[TypeFormatFlags["UseTypeOfFunction"] = 2] = "UseTypeOfFunction";
TypeFormatFlags[TypeFormatFlags["NoTruncation"] = 4] = "NoTruncation";
TypeFormatFlags[TypeFormatFlags["WriteArrowStyleSignature"] = 8] = "WriteArrowStyleSignature";
TypeFormatFlags[TypeFormatFlags["WriteOwnNameForAnyLike"] = 16] = "WriteOwnNameForAnyLike";
TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature";
TypeFormatFlags[TypeFormatFlags["InElementType"] = 64] = "InElementType";
TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 128] = "UseFullyQualifiedType";
})(ts.TypeFormatFlags || (ts.TypeFormatFlags = {}));
var TypeFormatFlags = ts.TypeFormatFlags;
(function (SymbolFormatFlags) {
SymbolFormatFlags[SymbolFormatFlags["None"] = 0] = "None";
SymbolFormatFlags[SymbolFormatFlags["WriteTypeParametersOrArguments"] = 1] = "WriteTypeParametersOrArguments";
SymbolFormatFlags[SymbolFormatFlags["UseOnlyExternalAliasing"] = 2] = "UseOnlyExternalAliasing";
})(ts.SymbolFormatFlags || (ts.SymbolFormatFlags = {}));
var SymbolFormatFlags = ts.SymbolFormatFlags;
(function (SymbolAccessibility) {
SymbolAccessibility[SymbolAccessibility["Accessible"] = 0] = "Accessible";
SymbolAccessibility[SymbolAccessibility["NotAccessible"] = 1] = "NotAccessible";
SymbolAccessibility[SymbolAccessibility["CannotBeNamed"] = 2] = "CannotBeNamed";
})(ts.SymbolAccessibility || (ts.SymbolAccessibility = {}));
var SymbolAccessibility = ts.SymbolAccessibility;
(function (SymbolFlags) {
SymbolFlags[SymbolFlags["FunctionScopedVariable"] = 1] = "FunctionScopedVariable";
SymbolFlags[SymbolFlags["BlockScopedVariable"] = 2] = "BlockScopedVariable";
SymbolFlags[SymbolFlags["Property"] = 4] = "Property";
SymbolFlags[SymbolFlags["EnumMember"] = 8] = "EnumMember";
SymbolFlags[SymbolFlags["Function"] = 16] = "Function";
SymbolFlags[SymbolFlags["Class"] = 32] = "Class";
SymbolFlags[SymbolFlags["Interface"] = 64] = "Interface";
SymbolFlags[SymbolFlags["ConstEnum"] = 128] = "ConstEnum";
SymbolFlags[SymbolFlags["RegularEnum"] = 256] = "RegularEnum";
SymbolFlags[SymbolFlags["ValueModule"] = 512] = "ValueModule";
SymbolFlags[SymbolFlags["NamespaceModule"] = 1024] = "NamespaceModule";
SymbolFlags[SymbolFlags["TypeLiteral"] = 2048] = "TypeLiteral";
SymbolFlags[SymbolFlags["ObjectLiteral"] = 4096] = "ObjectLiteral";
SymbolFlags[SymbolFlags["Method"] = 8192] = "Method";
SymbolFlags[SymbolFlags["Constructor"] = 16384] = "Constructor";
SymbolFlags[SymbolFlags["GetAccessor"] = 32768] = "GetAccessor";
SymbolFlags[SymbolFlags["SetAccessor"] = 65536] = "SetAccessor";
SymbolFlags[SymbolFlags["Signature"] = 131072] = "Signature";
SymbolFlags[SymbolFlags["TypeParameter"] = 262144] = "TypeParameter";
SymbolFlags[SymbolFlags["TypeAlias"] = 524288] = "TypeAlias";
SymbolFlags[SymbolFlags["ExportValue"] = 1048576] = "ExportValue";
SymbolFlags[SymbolFlags["ExportType"] = 2097152] = "ExportType";
SymbolFlags[SymbolFlags["ExportNamespace"] = 4194304] = "ExportNamespace";
SymbolFlags[SymbolFlags["Import"] = 8388608] = "Import";
SymbolFlags[SymbolFlags["Instantiated"] = 16777216] = "Instantiated";
SymbolFlags[SymbolFlags["Merged"] = 33554432] = "Merged";
SymbolFlags[SymbolFlags["Transient"] = 67108864] = "Transient";
SymbolFlags[SymbolFlags["Prototype"] = 134217728] = "Prototype";
SymbolFlags[SymbolFlags["UnionProperty"] = 268435456] = "UnionProperty";
SymbolFlags[SymbolFlags["Optional"] = 536870912] = "Optional";
SymbolFlags[SymbolFlags["Enum"] = 384] = "Enum";
SymbolFlags[SymbolFlags["Variable"] = 3] = "Variable";
SymbolFlags[SymbolFlags["Value"] = 107455] = "Value";
SymbolFlags[SymbolFlags["Type"] = 793056] = "Type";
SymbolFlags[SymbolFlags["Namespace"] = 1536] = "Namespace";
SymbolFlags[SymbolFlags["Module"] = 1536] = "Module";
SymbolFlags[SymbolFlags["Accessor"] = 98304] = "Accessor";
SymbolFlags[SymbolFlags["FunctionScopedVariableExcludes"] = 107454] = "FunctionScopedVariableExcludes";
SymbolFlags[SymbolFlags["BlockScopedVariableExcludes"] = 107455] = "BlockScopedVariableExcludes";
SymbolFlags[SymbolFlags["ParameterExcludes"] = 107455] = "ParameterExcludes";
SymbolFlags[SymbolFlags["PropertyExcludes"] = 107455] = "PropertyExcludes";
SymbolFlags[SymbolFlags["EnumMemberExcludes"] = 107455] = "EnumMemberExcludes";
SymbolFlags[SymbolFlags["FunctionExcludes"] = 106927] = "FunctionExcludes";
SymbolFlags[SymbolFlags["ClassExcludes"] = 899583] = "ClassExcludes";
SymbolFlags[SymbolFlags["InterfaceExcludes"] = 792992] = "InterfaceExcludes";
SymbolFlags[SymbolFlags["RegularEnumExcludes"] = 899327] = "RegularEnumExcludes";
SymbolFlags[SymbolFlags["ConstEnumExcludes"] = 899967] = "ConstEnumExcludes";
SymbolFlags[SymbolFlags["ValueModuleExcludes"] = 106639] = "ValueModuleExcludes";
SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes";
SymbolFlags[SymbolFlags["MethodExcludes"] = 99263] = "MethodExcludes";
SymbolFlags[SymbolFlags["GetAccessorExcludes"] = 41919] = "GetAccessorExcludes";
SymbolFlags[SymbolFlags["SetAccessorExcludes"] = 74687] = "SetAccessorExcludes";
SymbolFlags[SymbolFlags["TypeParameterExcludes"] = 530912] = "TypeParameterExcludes";
SymbolFlags[SymbolFlags["TypeAliasExcludes"] = 793056] = "TypeAliasExcludes";
SymbolFlags[SymbolFlags["ImportExcludes"] = 8388608] = "ImportExcludes";
SymbolFlags[SymbolFlags["ModuleMember"] = 8914931] = "ModuleMember";
SymbolFlags[SymbolFlags["ExportHasLocal"] = 944] = "ExportHasLocal";
SymbolFlags[SymbolFlags["HasLocals"] = 255504] = "HasLocals";
SymbolFlags[SymbolFlags["HasExports"] = 1952] = "HasExports";
SymbolFlags[SymbolFlags["HasMembers"] = 6240] = "HasMembers";
SymbolFlags[SymbolFlags["IsContainer"] = 262128] = "IsContainer";
SymbolFlags[SymbolFlags["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor";
SymbolFlags[SymbolFlags["Export"] = 7340032] = "Export";
})(ts.SymbolFlags || (ts.SymbolFlags = {}));
var SymbolFlags = ts.SymbolFlags;
(function (NodeCheckFlags) {
NodeCheckFlags[NodeCheckFlags["TypeChecked"] = 1] = "TypeChecked";
NodeCheckFlags[NodeCheckFlags["LexicalThis"] = 2] = "LexicalThis";
NodeCheckFlags[NodeCheckFlags["CaptureThis"] = 4] = "CaptureThis";
NodeCheckFlags[NodeCheckFlags["EmitExtends"] = 8] = "EmitExtends";
NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 16] = "SuperInstance";
NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 32] = "SuperStatic";
NodeCheckFlags[NodeCheckFlags["ContextChecked"] = 64] = "ContextChecked";
NodeCheckFlags[NodeCheckFlags["EnumValuesComputed"] = 128] = "EnumValuesComputed";
})(ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
var NodeCheckFlags = ts.NodeCheckFlags;
(function (TypeFlags) {
TypeFlags[TypeFlags["Any"] = 1] = "Any";
TypeFlags[TypeFlags["String"] = 2] = "String";
TypeFlags[TypeFlags["Number"] = 4] = "Number";
TypeFlags[TypeFlags["Boolean"] = 8] = "Boolean";
TypeFlags[TypeFlags["Void"] = 16] = "Void";
TypeFlags[TypeFlags["Undefined"] = 32] = "Undefined";
TypeFlags[TypeFlags["Null"] = 64] = "Null";
TypeFlags[TypeFlags["Enum"] = 128] = "Enum";
TypeFlags[TypeFlags["StringLiteral"] = 256] = "StringLiteral";
TypeFlags[TypeFlags["TypeParameter"] = 512] = "TypeParameter";
TypeFlags[TypeFlags["Class"] = 1024] = "Class";
TypeFlags[TypeFlags["Interface"] = 2048] = "Interface";
TypeFlags[TypeFlags["Reference"] = 4096] = "Reference";
TypeFlags[TypeFlags["Tuple"] = 8192] = "Tuple";
TypeFlags[TypeFlags["Union"] = 16384] = "Union";
TypeFlags[TypeFlags["Anonymous"] = 32768] = "Anonymous";
TypeFlags[TypeFlags["FromSignature"] = 65536] = "FromSignature";
TypeFlags[TypeFlags["ObjectLiteral"] = 131072] = "ObjectLiteral";
TypeFlags[TypeFlags["ContainsUndefinedOrNull"] = 262144] = "ContainsUndefinedOrNull";
TypeFlags[TypeFlags["ContainsObjectLiteral"] = 524288] = "ContainsObjectLiteral";
TypeFlags[TypeFlags["ESSymbol"] = 1048576] = "ESSymbol";
TypeFlags[TypeFlags["Intrinsic"] = 1048703] = "Intrinsic";
TypeFlags[TypeFlags["Primitive"] = 1049086] = "Primitive";
TypeFlags[TypeFlags["StringLike"] = 258] = "StringLike";
TypeFlags[TypeFlags["NumberLike"] = 132] = "NumberLike";
TypeFlags[TypeFlags["ObjectType"] = 48128] = "ObjectType";
TypeFlags[TypeFlags["RequiresWidening"] = 786432] = "RequiresWidening";
})(ts.TypeFlags || (ts.TypeFlags = {}));
var TypeFlags = ts.TypeFlags;
(function (SignatureKind) {
SignatureKind[SignatureKind["Call"] = 0] = "Call";
SignatureKind[SignatureKind["Construct"] = 1] = "Construct";
})(ts.SignatureKind || (ts.SignatureKind = {}));
var SignatureKind = ts.SignatureKind;
(function (IndexKind) {
IndexKind[IndexKind["String"] = 0] = "String";
IndexKind[IndexKind["Number"] = 1] = "Number";
})(ts.IndexKind || (ts.IndexKind = {}));
var IndexKind = ts.IndexKind;
(function (DiagnosticCategory) {
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
})(ts.DiagnosticCategory || (ts.DiagnosticCategory = {}));
var DiagnosticCategory = ts.DiagnosticCategory;
(function (ModuleKind) {
ModuleKind[ModuleKind["None"] = 0] = "None";
ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS";
ModuleKind[ModuleKind["AMD"] = 2] = "AMD";
})(ts.ModuleKind || (ts.ModuleKind = {}));
var ModuleKind = ts.ModuleKind;
(function (ScriptTarget) {
ScriptTarget[ScriptTarget["ES3"] = 0] = "ES3";
ScriptTarget[ScriptTarget["ES5"] = 1] = "ES5";
ScriptTarget[ScriptTarget["ES6"] = 2] = "ES6";
ScriptTarget[ScriptTarget["Latest"] = 2] = "Latest";
})(ts.ScriptTarget || (ts.ScriptTarget = {}));
var ScriptTarget = ts.ScriptTarget;
(function (CharacterCodes) {
CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter";
CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter";
CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed";
CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn";
CharacterCodes[CharacterCodes["lineSeparator"] = 8232] = "lineSeparator";
CharacterCodes[CharacterCodes["paragraphSeparator"] = 8233] = "paragraphSeparator";
CharacterCodes[CharacterCodes["nextLine"] = 133] = "nextLine";
CharacterCodes[CharacterCodes["space"] = 32] = "space";
CharacterCodes[CharacterCodes["nonBreakingSpace"] = 160] = "nonBreakingSpace";
CharacterCodes[CharacterCodes["enQuad"] = 8192] = "enQuad";
CharacterCodes[CharacterCodes["emQuad"] = 8193] = "emQuad";
CharacterCodes[CharacterCodes["enSpace"] = 8194] = "enSpace";
CharacterCodes[CharacterCodes["emSpace"] = 8195] = "emSpace";
CharacterCodes[CharacterCodes["threePerEmSpace"] = 8196] = "threePerEmSpace";
CharacterCodes[CharacterCodes["fourPerEmSpace"] = 8197] = "fourPerEmSpace";
CharacterCodes[CharacterCodes["sixPerEmSpace"] = 8198] = "sixPerEmSpace";
CharacterCodes[CharacterCodes["figureSpace"] = 8199] = "figureSpace";
CharacterCodes[CharacterCodes["punctuationSpace"] = 8200] = "punctuationSpace";
CharacterCodes[CharacterCodes["thinSpace"] = 8201] = "thinSpace";
CharacterCodes[CharacterCodes["hairSpace"] = 8202] = "hairSpace";
CharacterCodes[CharacterCodes["zeroWidthSpace"] = 8203] = "zeroWidthSpace";
CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 8239] = "narrowNoBreakSpace";
CharacterCodes[CharacterCodes["ideographicSpace"] = 12288] = "ideographicSpace";
CharacterCodes[CharacterCodes["mathematicalSpace"] = 8287] = "mathematicalSpace";
CharacterCodes[CharacterCodes["ogham"] = 5760] = "ogham";
CharacterCodes[CharacterCodes["_"] = 95] = "_";
CharacterCodes[CharacterCodes["$"] = 36] = "$";
CharacterCodes[CharacterCodes["_0"] = 48] = "_0";
CharacterCodes[CharacterCodes["_1"] = 49] = "_1";
CharacterCodes[CharacterCodes["_2"] = 50] = "_2";
CharacterCodes[CharacterCodes["_3"] = 51] = "_3";
CharacterCodes[CharacterCodes["_4"] = 52] = "_4";
CharacterCodes[CharacterCodes["_5"] = 53] = "_5";
CharacterCodes[CharacterCodes["_6"] = 54] = "_6";
CharacterCodes[CharacterCodes["_7"] = 55] = "_7";
CharacterCodes[CharacterCodes["_8"] = 56] = "_8";
CharacterCodes[CharacterCodes["_9"] = 57] = "_9";
CharacterCodes[CharacterCodes["a"] = 97] = "a";
CharacterCodes[CharacterCodes["b"] = 98] = "b";
CharacterCodes[CharacterCodes["c"] = 99] = "c";
CharacterCodes[CharacterCodes["d"] = 100] = "d";
CharacterCodes[CharacterCodes["e"] = 101] = "e";
CharacterCodes[CharacterCodes["f"] = 102] = "f";
CharacterCodes[CharacterCodes["g"] = 103] = "g";
CharacterCodes[CharacterCodes["h"] = 104] = "h";
CharacterCodes[CharacterCodes["i"] = 105] = "i";
CharacterCodes[CharacterCodes["j"] = 106] = "j";
CharacterCodes[CharacterCodes["k"] = 107] = "k";
CharacterCodes[CharacterCodes["l"] = 108] = "l";
CharacterCodes[CharacterCodes["m"] = 109] = "m";
CharacterCodes[CharacterCodes["n"] = 110] = "n";
CharacterCodes[CharacterCodes["o"] = 111] = "o";
CharacterCodes[CharacterCodes["p"] = 112] = "p";
CharacterCodes[CharacterCodes["q"] = 113] = "q";
CharacterCodes[CharacterCodes["r"] = 114] = "r";
CharacterCodes[CharacterCodes["s"] = 115] = "s";
CharacterCodes[CharacterCodes["t"] = 116] = "t";
CharacterCodes[CharacterCodes["u"] = 117] = "u";
CharacterCodes[CharacterCodes["v"] = 118] = "v";
CharacterCodes[CharacterCodes["w"] = 119] = "w";
CharacterCodes[CharacterCodes["x"] = 120] = "x";
CharacterCodes[CharacterCodes["y"] = 121] = "y";
CharacterCodes[CharacterCodes["z"] = 122] = "z";
CharacterCodes[CharacterCodes["A"] = 65] = "A";
CharacterCodes[CharacterCodes["B"] = 66] = "B";
CharacterCodes[CharacterCodes["C"] = 67] = "C";
CharacterCodes[CharacterCodes["D"] = 68] = "D";
CharacterCodes[CharacterCodes["E"] = 69] = "E";
CharacterCodes[CharacterCodes["F"] = 70] = "F";
CharacterCodes[CharacterCodes["G"] = 71] = "G";
CharacterCodes[CharacterCodes["H"] = 72] = "H";
CharacterCodes[CharacterCodes["I"] = 73] = "I";
CharacterCodes[CharacterCodes["J"] = 74] = "J";
CharacterCodes[CharacterCodes["K"] = 75] = "K";
CharacterCodes[CharacterCodes["L"] = 76] = "L";
CharacterCodes[CharacterCodes["M"] = 77] = "M";
CharacterCodes[CharacterCodes["N"] = 78] = "N";
CharacterCodes[CharacterCodes["O"] = 79] = "O";
CharacterCodes[CharacterCodes["P"] = 80] = "P";
CharacterCodes[CharacterCodes["Q"] = 81] = "Q";
CharacterCodes[CharacterCodes["R"] = 82] = "R";
CharacterCodes[CharacterCodes["S"] = 83] = "S";
CharacterCodes[CharacterCodes["T"] = 84] = "T";
CharacterCodes[CharacterCodes["U"] = 85] = "U";
CharacterCodes[CharacterCodes["V"] = 86] = "V";
CharacterCodes[CharacterCodes["W"] = 87] = "W";
CharacterCodes[CharacterCodes["X"] = 88] = "X";
CharacterCodes[CharacterCodes["Y"] = 89] = "Y";
CharacterCodes[CharacterCodes["Z"] = 90] = "Z";
CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand";
CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk";
CharacterCodes[CharacterCodes["at"] = 64] = "at";
CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash";
CharacterCodes[CharacterCodes["backtick"] = 96] = "backtick";
CharacterCodes[CharacterCodes["bar"] = 124] = "bar";
CharacterCodes[CharacterCodes["caret"] = 94] = "caret";
CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace";
CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket";
CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen";
CharacterCodes[CharacterCodes["colon"] = 58] = "colon";
CharacterCodes[CharacterCodes["comma"] = 44] = "comma";
CharacterCodes[CharacterCodes["dot"] = 46] = "dot";
CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote";
CharacterCodes[CharacterCodes["equals"] = 61] = "equals";
CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation";
CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan";
CharacterCodes[CharacterCodes["hash"] = 35] = "hash";
CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan";
CharacterCodes[CharacterCodes["minus"] = 45] = "minus";
CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace";
CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket";
CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen";
CharacterCodes[CharacterCodes["percent"] = 37] = "percent";
CharacterCodes[CharacterCodes["plus"] = 43] = "plus";
CharacterCodes[CharacterCodes["question"] = 63] = "question";
CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon";
CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote";
CharacterCodes[CharacterCodes["slash"] = 47] = "slash";
CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde";
CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace";
CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed";
CharacterCodes[CharacterCodes["byteOrderMark"] = 65279] = "byteOrderMark";
CharacterCodes[CharacterCodes["tab"] = 9] = "tab";
CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab";
})(ts.CharacterCodes || (ts.CharacterCodes = {}));
var CharacterCodes = ts.CharacterCodes;
})(ts || (ts = {}));
var ts;
(function (ts) {
(function (Ternary) {
Ternary[Ternary["False"] = 0] = "False";
Ternary[Ternary["Maybe"] = 1] = "Maybe";
Ternary[Ternary["True"] = -1] = "True";
})(ts.Ternary || (ts.Ternary = {}));
var Ternary = ts.Ternary;
(function (Comparison) {
Comparison[Comparison["LessThan"] = -1] = "LessThan";
Comparison[Comparison["EqualTo"] = 0] = "EqualTo";
Comparison[Comparison["GreaterThan"] = 1] = "GreaterThan";
})(ts.Comparison || (ts.Comparison = {}));
var Comparison = ts.Comparison;
function forEach(array, callback) {
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
var result = callback(array[i], i);
if (result) {
return result;
}
}
}
return undefined;
}
ts.forEach = forEach;
function contains(array, value) {
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return true;
}
}
}
return false;
}
ts.contains = contains;
function indexOf(array, value) {
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === value) {
return i;
}
}
}
return -1;
}
ts.indexOf = indexOf;
function countWhere(array, predicate) {
var count = 0;
if (array) {
for (var i = 0, len = array.length; i < len; i++) {
if (predicate(array[i])) {
count++;
}
}
}
return count;
}
ts.countWhere = countWhere;
function filter(array, f) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
if (f(item)) {
result.push(item);
}
}
}
return result;
}
ts.filter = filter;
function map(array, f) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
result.push(f(array[i]));
}
}
return result;
}
ts.map = map;
function concatenate(array1, array2) {
if (!array2 || !array2.length)
return array1;
if (!array1 || !array1.length)
return array2;
return array1.concat(array2);
}
ts.concatenate = concatenate;
function deduplicate(array) {
if (array) {
var result = [];
for (var i = 0, len = array.length; i < len; i++) {
var item = array[i];
if (!contains(result, item))
result.push(item);
}
}
return result;
}
ts.deduplicate = deduplicate;
function sum(array, prop) {
var result = 0;
for (var i = 0; i < array.length; i++) {
result += array[i][prop];
}
return result;
}
ts.sum = sum;
function addRange(to, from) {
for (var i = 0, n = from.length; i < n; i++) {
to.push(from[i]);
}
}
ts.addRange = addRange;
function lastOrUndefined(array) {
if (array.length === 0) {
return undefined;
}
return array[array.length - 1];
}
ts.lastOrUndefined = lastOrUndefined;
function binarySearch(array, value) {
var low = 0;
var high = array.length - 1;
while (low <= high) {
var middle = low + ((high - low) >> 1);
var midValue = array[middle];
if (midValue === value) {
return middle;
}
else if (midValue > value) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return ~low;
}
ts.binarySearch = binarySearch;
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasProperty(map, key) {
return hasOwnProperty.call(map, key);
}
ts.hasProperty = hasProperty;
function getProperty(map, key) {
return hasOwnProperty.call(map, key) ? map[key] : undefined;
}
ts.getProperty = getProperty;
function isEmpty(map) {
for (var id in map) {
if (hasProperty(map, id)) {
return false;
}
}
return true;
}
ts.isEmpty = isEmpty;
function clone(object) {
var result = {};
for (var id in object) {
result[id] = object[id];
}
return result;
}
ts.clone = clone;
function extend(first, second) {
var result = {};
for (var id in first) {
result[id] = first[id];
}
for (var id in second) {
if (!hasProperty(result, id)) {
result[id] = second[id];
}
}
return result;
}
ts.extend = extend;
function forEachValue(map, callback) {
var result;
for (var id in map) {
if (result = callback(map[id]))
break;
}
return result;
}
ts.forEachValue = forEachValue;
function forEachKey(map, callback) {
var result;
for (var id in map) {
if (result = callback(id))
break;
}
return result;
}
ts.forEachKey = forEachKey;
function lookUp(map, key) {
return hasProperty(map, key) ? map[key] : undefined;
}
ts.lookUp = lookUp;
function mapToArray(map) {
var result = [];
for (var id in map) {
result.push(map[id]);
}
return result;
}
ts.mapToArray = mapToArray;
function copyMap(source, target) {
for (var p in source) {
target[p] = source[p];
}
}
ts.copyMap = copyMap;
function arrayToMap(array, makeKey) {
var result = {};
forEach(array, function (value) {
result[makeKey(value)] = value;
});
return result;
}
ts.arrayToMap = arrayToMap;
function formatStringFromArgs(text, args, baseIndex) {
baseIndex = baseIndex || 0;
return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; });
}
ts.localizedDiagnosticMessages = undefined;
function getLocaleSpecificMessage(message) {
return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message] ? ts.localizedDiagnosticMessages[message] : message;
}
ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
function createFileDiagnostic(file, start, length, message) {
Debug.assert(start >= 0, "start must be non-negative, is " + start);
Debug.assert(length >= 0, "length must be non-negative, is " + length);
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 4) {
text = formatStringFromArgs(text, arguments, 4);
}
return {
file: file,
start: start,
length: length,
messageText: text,
category: message.category,
code: message.code
};
}
ts.createFileDiagnostic = createFileDiagnostic;
function createCompilerDiagnostic(message) {
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 1) {
text = formatStringFromArgs(text, arguments, 1);
}
return {
file: undefined,
start: undefined,
length: undefined,
messageText: text,
category: message.category,
code: message.code
};
}
ts.createCompilerDiagnostic = createCompilerDiagnostic;
function chainDiagnosticMessages(details, message) {
var text = getLocaleSpecificMessage(message.key);
if (arguments.length > 2) {
text = formatStringFromArgs(text, arguments, 2);
}
return {
messageText: text,
category: message.category,
code: message.code,
next: details
};
}
ts.chainDiagnosticMessages = chainDiagnosticMessages;
function concatenateDiagnosticMessageChains(headChain, tailChain) {
Debug.assert(!headChain.next);
headChain.next = tailChain;
return headChain;
}
ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
function compareValues(a, b) {
if (a === b)
return 0;
if (a === undefined)
return -1;
if (b === undefined)
return 1;
return a < b ? -1 : 1;
}
ts.compareValues = compareValues;
function getDiagnosticFileName(diagnostic) {
return diagnostic.file ? diagnostic.file.fileName : undefined;
}
function compareDiagnostics(d1, d2) {
return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) ||
compareValues(d1.start, d2.start) ||
compareValues(d1.length, d2.length) ||
compareValues(d1.code, d2.code) ||
compareMessageText(d1.messageText, d2.messageText) ||
0;
}
ts.compareDiagnostics = compareDiagnostics;
function compareMessageText(text1, text2) {
while (text1 && text2) {
var string1 = typeof text1 === "string" ? text1 : text1.messageText;
var string2 = typeof text2 === "string" ? text2 : text2.messageText;
var res = compareValues(string1, string2);
if (res) {
return res;
}
text1 = typeof text1 === "string" ? undefined : text1.next;
text2 = typeof text2 === "string" ? undefined : text2.next;
}
if (!text1 && !text2) {
return 0;
}
return text1 ? 1 : -1;
}
function sortAndDeduplicateDiagnostics(diagnostics) {
return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics));
}
ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics;
function deduplicateSortedDiagnostics(diagnostics) {
if (diagnostics.length < 2) {
return diagnostics;
}
var newDiagnostics = [diagnostics[0]];
var previousDiagnostic = diagnostics[0];
for (var i = 1; i < diagnostics.length; i++) {
var currentDiagnostic = diagnostics[i];
var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0;
if (!isDupe) {
newDiagnostics.push(currentDiagnostic);
previousDiagnostic = currentDiagnostic;
}
}
return newDiagnostics;
}
ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics;
function normalizeSlashes(path) {
return path.replace(/\\/g, "/");
}
ts.normalizeSlashes = normalizeSlashes;
function getRootLength(path) {
if (path.charCodeAt(0) === 47) {
if (path.charCodeAt(1) !== 47)
return 1;
var p1 = path.indexOf("/", 2);
if (p1 < 0)
return 2;
var p2 = path.indexOf("/", p1 + 1);
if (p2 < 0)
return p1 + 1;
return p2 + 1;
}
if (path.charCodeAt(1) === 58) {
if (path.charCodeAt(2) === 47)
return 3;
return 2;
}
return 0;
}
ts.getRootLength = getRootLength;
ts.directorySeparator = "/";
function getNormalizedParts(normalizedSlashedPath, rootLength) {
var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator);
var normalized = [];
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part !== ".") {
if (part === ".." && normalized.length > 0 && normalized[normalized.length - 1] !== "..") {
normalized.pop();
}
else {
normalized.push(part);
}
}
}
return normalized;
}
function normalizePath(path) {
var path = normalizeSlashes(path);
var rootLength = getRootLength(path);
var normalized = getNormalizedParts(path, rootLength);
return path.substr(0, rootLength) + normalized.join(ts.directorySeparator);
}
ts.normalizePath = normalizePath;
function getDirectoryPath(path) {
return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator)));
}
ts.getDirectoryPath = getDirectoryPath;
function isUrl(path) {
return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1;
}
ts.isUrl = isUrl;
function isRootedDiskPath(path) {
return getRootLength(path) !== 0;
}
ts.isRootedDiskPath = isRootedDiskPath;
function normalizedPathComponents(path, rootLength) {
var normalizedParts = getNormalizedParts(path, rootLength);
return [path.substr(0, rootLength)].concat(normalizedParts);
}
function getNormalizedPathComponents(path, currentDirectory) {
var path = normalizeSlashes(path);
var rootLength = getRootLength(path);
if (rootLength == 0) {
path = combinePaths(normalizeSlashes(currentDirectory), path);
rootLength = getRootLength(path);
}
return normalizedPathComponents(path, rootLength);
}
ts.getNormalizedPathComponents = getNormalizedPathComponents;
function getNormalizedAbsolutePath(fileName, currentDirectory) {
return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
}
ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
function getNormalizedPathFromPathComponents(pathComponents) {
if (pathComponents && pathComponents.length) {
return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator);
}
}
ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents;
function getNormalizedPathComponentsOfUrl(url) {
var urlLength = url.length;
var rootLength = url.indexOf("://") + "://".length;
while (rootLength < urlLength) {
if (url.charCodeAt(rootLength) === 47) {
rootLength++;
}
else {
break;
}
}
if (rootLength === urlLength) {
return [url];
}
var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength);
if (indexOfNextSlash !== -1) {
rootLength = indexOfNextSlash + 1;
return normalizedPathComponents(url, rootLength);
}
else {
return [url + ts.directorySeparator];
}
}
function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) {
if (isUrl(pathOrUrl)) {
return getNormalizedPathComponentsOfUrl(pathOrUrl);
}
else {
return getNormalizedPathComponents(pathOrUrl, currentDirectory);
}
}
function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) {
var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory);
var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory);
if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") {
directoryComponents.length--;
}
for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) {
if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) {
break;
}
}
if (joinStartIndex) {
var relativePath = "";
var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length);
for (; joinStartIndex < directoryComponents.length; joinStartIndex++) {
if (directoryComponents[joinStartIndex] !== "") {
relativePath = relativePath + ".." + ts.directorySeparator;
}
}
return relativePath + relativePathComponents.join(ts.directorySeparator);
}
var absolutePath = getNormalizedPathFromPathComponents(pathComponents);
if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) {
absolutePath = "file:///" + absolutePath;
}
return absolutePath;
}
ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl;
function getBaseFileName(path) {
var i = path.lastIndexOf(ts.directorySeparator);
return i < 0 ? path : path.substring(i + 1);
}
ts.getBaseFileName = getBaseFileName;
function combinePaths(path1, path2) {
if (!(path1 && path1.length))
return path2;
if (!(path2 && path2.length))
return path1;
if (getRootLength(path2) !== 0)
return path2;
if (path1.charAt(path1.length - 1) === ts.directorySeparator)
return path1 + path2;
return path1 + ts.directorySeparator + path2;
}
ts.combinePaths = combinePaths;
function fileExtensionIs(path, extension) {
var pathLen = path.length;
var extLen = extension.length;
return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension;
}
ts.fileExtensionIs = fileExtensionIs;
var supportedExtensions = [".d.ts", ".ts", ".js"];
function removeFileExtension(path) {
for (var i = 0; i < supportedExtensions.length; i++) {
var ext = supportedExtensions[i];
if (fileExtensionIs(path, ext)) {
return path.substr(0, path.length - ext.length);
}
}
return path;
}
ts.removeFileExtension = removeFileExtension;
var backslashOrDoubleQuote = /[\"\\]/g;
var escapedCharsRegExp = /[\0-\19\t\v\f\b\0\r\n\u2028\u2029\u0085]/g;
var escapedCharsMap = {
"\0": "\\0",
"\t": "\\t",
"\v": "\\v",
"\f": "\\f",
"\b": "\\b",
"\r": "\\r",
"\n": "\\n",
"\\": "\\\\",
"\"": "\\\"",
"\u2028": "\\u2028",
"\u2029": "\\u2029",
"\u0085": "\\u0085"
};
function escapeString(s) {
s = backslashOrDoubleQuote.test(s) ? s.replace(backslashOrDoubleQuote, getReplacement) : s;
s = escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, getReplacement) : s;
return s;
function getReplacement(c) {
return escapedCharsMap[c] || unicodeEscape(c);
}
function unicodeEscape(c) {
var hexCharCode = c.charCodeAt(0).toString(16);
var paddedHexCode = ("0000" + hexCharCode).slice(-4);
return "\\u" + paddedHexCode;
}
}
ts.escapeString = escapeString;
function getDefaultLibFileName(options) {
return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts";
}
ts.getDefaultLibFileName = getDefaultLibFileName;
function Symbol(flags, name) {
this.flags = flags;
this.name = name;
this.declarations = undefined;
}
function Type(checker, flags) {
this.flags = flags;
}
function Signature(checker) {
}
ts.objectAllocator = {
getNodeConstructor: function (kind) {
function Node() {
}
Node.prototype = {
kind: kind,
pos: 0,
end: 0,
flags: 0,
parent: undefined
};
return Node;
},
getSymbolConstructor: function () { return Symbol; },
getTypeConstructor: function () { return Type; },
getSignatureConstructor: function () { return Signature; }
};
(function (AssertionLevel) {
AssertionLevel[AssertionLevel["None"] = 0] = "None";
AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal";
AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive";
AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive";
})(ts.AssertionLevel || (ts.AssertionLevel = {}));
var AssertionLevel = ts.AssertionLevel;
var Debug;
(function (Debug) {
var currentAssertionLevel = 0;
function shouldAssert(level) {
return currentAssertionLevel >= level;
}
Debug.shouldAssert = shouldAssert;
function assert(expression, message, verboseDebugInfo) {
if (!expression) {
var verboseDebugString = "";
if (verboseDebugInfo) {
verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo();
}
throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString);
}
}
Debug.assert = assert;
function fail(message) {
Debug.assert(false, message);
}
Debug.fail = fail;
})(Debug = ts.Debug || (ts.Debug = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.sys = (function () {
function getWScriptSystem() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fileStream = new ActiveXObject("ADODB.Stream");
fileStream.Type = 2;
var binaryStream = new ActiveXObject("ADODB.Stream");
binaryStream.Type = 1;
var args = [];
for (var i = 0; i < WScript.Arguments.length; i++) {
args[i] = WScript.Arguments.Item(i);
}
function readFile(fileName, encoding) {
if (!fso.FileExists(fileName)) {
return undefined;
}
fileStream.Open();
try {
if (encoding) {
fileStream.Charset = encoding;
fileStream.LoadFromFile(fileName);
}
else {
fileStream.Charset = "x-ansi";
fileStream.LoadFromFile(fileName);
var bom = fileStream.ReadText(2) || "";
fileStream.Position = 0;
fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8";
}
return fileStream.ReadText();
}
catch (e) {
throw e;
}
finally {
fileStream.Close();
}
}
function writeFile(fileName, data, writeByteOrderMark) {
fileStream.Open();
binaryStream.Open();
try {
fileStream.Charset = "utf-8";
fileStream.WriteText(data);
if (writeByteOrderMark) {
fileStream.Position = 0;
}
else {
fileStream.Position = 3;
}
fileStream.CopyTo(binaryStream);
binaryStream.SaveToFile(fileName, 2);
}
finally {
binaryStream.Close();
fileStream.Close();
}
}
function getNames(collection) {
var result = [];
for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) {
result.push(e.item().Name);
}
return result.sort();
}
function readDirectory(path, extension) {
var result = [];
visitDirectory(path);
return result;
function visitDirectory(path) {
var folder = fso.GetFolder(path || ".");
var files = getNames(folder.files);
for (var i = 0; i < files.length; i++) {
var name = files[i];
if (!extension || ts.fileExtensionIs(name, extension)) {
result.push(ts.combinePaths(path, name));
}
}
var subfolders = getNames(folder.subfolders);
for (var i = 0; i < subfolders.length; i++) {
visitDirectory(ts.combinePaths(path, subfolders[i]));
}
}
}
return {
args: args,
newLine: "\r\n",
useCaseSensitiveFileNames: false,
write: function (s) {
WScript.StdOut.Write(s);
},
readFile: readFile,
writeFile: writeFile,
resolvePath: function (path) {
return fso.GetAbsolutePathName(path);
},
fileExists: function (path) {
return fso.FileExists(path);
},
directoryExists: function (path) {
return fso.FolderExists(path);
},
createDirectory: function (directoryName) {
if (!this.directoryExists(directoryName)) {
fso.CreateFolder(directoryName);
}
},
getExecutingFilePath: function () {
return WScript.ScriptFullName;
},
getCurrentDirectory: function () {
return new ActiveXObject("WScript.Shell").CurrentDirectory;
},
readDirectory: readDirectory,
exit: function (exitCode) {
try {
WScript.Quit(exitCode);
}
catch (e) {
}
}
};
}
function getNodeSystem() {
var _fs = require("fs");
var _path = require("path");
var _os = require('os');
var platform = _os.platform();
var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin";
function readFile(fileName, encoding) {
if (!_fs.existsSync(fileName)) {
return undefined;
}
var buffer = _fs.readFileSync(fileName);
var len = buffer.length;
if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) {
len &= ~1;
for (var i = 0; i < len; i += 2) {
var temp = buffer[i];
buffer[i] = buffer[i + 1];
buffer[i + 1] = temp;
}
return buffer.toString("utf16le", 2);
}
if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) {
return buffer.toString("utf16le", 2);
}
if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {
return buffer.toString("utf8", 3);
}
return buffer.toString("utf8");
}
function writeFile(fileName, data, writeByteOrderMark) {
if (writeByteOrderMark) {
data = '\uFEFF' + data;
}
_fs.writeFileSync(fileName, data, "utf8");
}
function readDirectory(path, extension) {
var result = [];
visitDirectory(path);
return result;
function visitDirectory(path) {
var files = _fs.readdirSync(path || ".").sort();
var directories = [];
for (var i = 0; i < files.length; i++) {
var name = ts.combinePaths(path, files[i]);
var stat = _fs.lstatSync(name);
if (stat.isFile()) {
if (!extension || ts.fileExtensionIs(name, extension)) {
result.push(name);
}
}
else if (stat.isDirectory()) {
directories.push(name);
}
}
for (var i = 0; i < directories.length; i++) {
visitDirectory(directories[i]);
}
}
}
return {
args: process.argv.slice(2),
newLine: _os.EOL,
useCaseSensitiveFileNames: useCaseSensitiveFileNames,
write: function (s) {
_fs.writeSync(1, s);
},
readFile: readFile,
writeFile: writeFile,
watchFile: function (fileName, callback) {
_fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged);
return {
close: function () {
_fs.unwatchFile(fileName, fileChanged);
}
};
function fileChanged(curr, prev) {
if (+curr.mtime <= +prev.mtime) {
return;
}
callback(fileName);
}
;
},
resolvePath: function (path) {
return _path.resolve(path);
},
fileExists: function (path) {
return _fs.existsSync(path);
},
directoryExists: function (path) {
return _fs.existsSync(path) && _fs.statSync(path).isDirectory();
},
createDirectory: function (directoryName) {
if (!this.directoryExists(directoryName)) {
_fs.mkdirSync(directoryName);
}
},
getExecutingFilePath: function () {
return __filename;
},
getCurrentDirectory: function () {
return process.cwd();
},
readDirectory: readDirectory,
getMemoryUsage: function () {
if (global.gc) {
global.gc();
}
return process.memoryUsage().heapUsed;
},
exit: function (exitCode) {
process.exit(exitCode);
}
};
}
if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") {
return getWScriptSystem();
}
else if (typeof module !== "undefined" && module.exports) {
return getNodeSystem();
}
else {
return undefined;
}
})();
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.Diagnostics = {
Unterminated_string_literal: { code: 1002, category: 1, key: "Unterminated string literal." },
Identifier_expected: { code: 1003, category: 1, key: "Identifier expected." },
_0_expected: { code: 1005, category: 1, key: "'{0}' expected." },
A_file_cannot_have_a_reference_to_itself: { code: 1006, category: 1, key: "A file cannot have a reference to itself." },
Trailing_comma_not_allowed: { code: 1009, category: 1, key: "Trailing comma not allowed." },
Asterisk_Slash_expected: { code: 1010, category: 1, key: "'*/' expected." },
Unexpected_token: { code: 1012, category: 1, key: "Unexpected token." },
Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1, key: "Catch clause parameter cannot have a type annotation." },
A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1, key: "A rest parameter must be last in a parameter list." },
Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1, key: "Parameter cannot have question mark and initializer." },
A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1, key: "A required parameter cannot follow an optional parameter." },
An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1, key: "An index signature cannot have a rest parameter." },
An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1, key: "An index signature parameter cannot have an accessibility modifier." },
An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1, key: "An index signature parameter cannot have a question mark." },
An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1, key: "An index signature parameter cannot have an initializer." },
An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1, key: "An index signature must have a type annotation." },
An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1, key: "An index signature parameter must have a type annotation." },
An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1, key: "An index signature parameter type must be 'string' or 'number'." },
A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: 1, key: "A class or interface declaration can only have one 'extends' clause." },
An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: 1, key: "An 'extends' clause must precede an 'implements' clause." },
A_class_can_only_extend_a_single_class: { code: 1026, category: 1, key: "A class can only extend a single class." },
A_class_declaration_can_only_have_one_implements_clause: { code: 1027, category: 1, key: "A class declaration can only have one 'implements' clause." },
Accessibility_modifier_already_seen: { code: 1028, category: 1, key: "Accessibility modifier already seen." },
_0_modifier_must_precede_1_modifier: { code: 1029, category: 1, key: "'{0}' modifier must precede '{1}' modifier." },
_0_modifier_already_seen: { code: 1030, category: 1, key: "'{0}' modifier already seen." },
_0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1, key: "'{0}' modifier cannot appear on a class element." },
An_interface_declaration_cannot_have_an_implements_clause: { code: 1032, category: 1, key: "An interface declaration cannot have an 'implements' clause." },
super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: 1, key: "'super' must be followed by an argument list or member access." },
Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1, key: "Only ambient modules can use quoted names." },
Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1, key: "Statements are not allowed in ambient contexts." },
A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1, key: "A 'declare' modifier cannot be used in an already ambient context." },
Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1, key: "Initializers are not allowed in ambient contexts." },
_0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1, key: "'{0}' modifier cannot appear on a module element." },
A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1, key: "A 'declare' modifier cannot be used with an interface declaration." },
A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." },
A_rest_parameter_cannot_be_optional: { code: 1047, category: 1, key: "A rest parameter cannot be optional." },
A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1, key: "A rest parameter cannot have an initializer." },
A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1, key: "A 'set' accessor must have exactly one parameter." },
A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1, key: "A 'set' accessor cannot have an optional parameter." },
A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1, key: "A 'set' accessor parameter cannot have an initializer." },
A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1, key: "A 'set' accessor cannot have rest parameter." },
A_get_accessor_cannot_have_parameters: { code: 1054, category: 1, key: "A 'get' accessor cannot have parameters." },
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1, key: "Accessors are only available when targeting ECMAScript 5 and higher." },
Enum_member_must_have_initializer: { code: 1061, category: 1, key: "Enum member must have initializer." },
An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1, key: "An export assignment cannot be used in an internal module." },
Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1, key: "Ambient enum elements can only have integer literal initializers." },
Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1, key: "Unexpected token. A constructor, method, accessor, or property was expected." },
A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1, key: "A 'declare' modifier cannot be used with an import declaration." },
Invalid_reference_directive_syntax: { code: 1084, category: 1, key: "Invalid 'reference' directive syntax." },
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1, key: "Octal literals are not available when targeting ECMAScript 5 and higher." },
An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1, key: "An accessor cannot be declared in an ambient context." },
_0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1, key: "'{0}' modifier cannot appear on a constructor declaration." },
_0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1, key: "'{0}' modifier cannot appear on a parameter." },
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1, key: "Only a single variable declaration is allowed in a 'for...in' statement." },
Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1, key: "Type parameters cannot appear on a constructor declaration." },
Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1, key: "Type annotation cannot appear on a constructor declaration." },
An_accessor_cannot_have_type_parameters: { code: 1094, category: 1, key: "An accessor cannot have type parameters." },
A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1, key: "A 'set' accessor cannot have a return type annotation." },
An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1, key: "An index signature must have exactly one parameter." },
_0_list_cannot_be_empty: { code: 1097, category: 1, key: "'{0}' list cannot be empty." },
Type_parameter_list_cannot_be_empty: { code: 1098, category: 1, key: "Type parameter list cannot be empty." },
Type_argument_list_cannot_be_empty: { code: 1099, category: 1, key: "Type argument list cannot be empty." },
Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1, key: "Invalid use of '{0}' in strict mode." },
with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1, key: "'with' statements are not allowed in strict mode." },
delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1, key: "'delete' cannot be called on an identifier in strict mode." },
A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1, key: "A 'continue' statement can only be used within an enclosing iteration statement." },
A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." },
Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1, key: "Jump target cannot cross function boundary." },
A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1, key: "A 'return' statement can only be used within a function body." },
Expression_expected: { code: 1109, category: 1, key: "Expression expected." },
Type_expected: { code: 1110, category: 1, key: "Type expected." },
A_class_member_cannot_be_declared_optional: { code: 1112, category: 1, key: "A class member cannot be declared optional." },
A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1, key: "A 'default' clause cannot appear more than once in a 'switch' statement." },
Duplicate_label_0: { code: 1114, category: 1, key: "Duplicate label '{0}'" },
A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." },
A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1, key: "A 'break' statement can only jump to a label of an enclosing statement." },
An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1, key: "An object literal cannot have multiple properties with the same name in strict mode." },
An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1, key: "An object literal cannot have multiple get/set accessors with the same name." },
An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1, key: "An object literal cannot have property and accessor with the same name." },
An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1, key: "An export assignment cannot have modifiers." },
Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: 1, key: "Octal literals are not allowed in strict mode." },
A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: 1, key: "A tuple type element list cannot be empty." },
Variable_declaration_list_cannot_be_empty: { code: 1123, category: 1, key: "Variable declaration list cannot be empty." },
Digit_expected: { code: 1124, category: 1, key: "Digit expected." },
Hexadecimal_digit_expected: { code: 1125, category: 1, key: "Hexadecimal digit expected." },
Unexpected_end_of_text: { code: 1126, category: 1, key: "Unexpected end of text." },
Invalid_character: { code: 1127, category: 1, key: "Invalid character." },
Declaration_or_statement_expected: { code: 1128, category: 1, key: "Declaration or statement expected." },
Statement_expected: { code: 1129, category: 1, key: "Statement expected." },
case_or_default_expected: { code: 1130, category: 1, key: "'case' or 'default' expected." },
Property_or_signature_expected: { code: 1131, category: 1, key: "Property or signature expected." },
Enum_member_expected: { code: 1132, category: 1, key: "Enum member expected." },
Type_reference_expected: { code: 1133, category: 1, key: "Type reference expected." },
Variable_declaration_expected: { code: 1134, category: 1, key: "Variable declaration expected." },
Argument_expression_expected: { code: 1135, category: 1, key: "Argument expression expected." },
Property_assignment_expected: { code: 1136, category: 1, key: "Property assignment expected." },
Expression_or_comma_expected: { code: 1137, category: 1, key: "Expression or comma expected." },
Parameter_declaration_expected: { code: 1138, category: 1, key: "Parameter declaration expected." },
Type_parameter_declaration_expected: { code: 1139, category: 1, key: "Type parameter declaration expected." },
Type_argument_expected: { code: 1140, category: 1, key: "Type argument expected." },
String_literal_expected: { code: 1141, category: 1, key: "String literal expected." },
Line_break_not_permitted_here: { code: 1142, category: 1, key: "Line break not permitted here." },
or_expected: { code: 1144, category: 1, key: "'{' or ';' expected." },
Modifiers_not_permitted_on_index_signature_members: { code: 1145, category: 1, key: "Modifiers not permitted on index signature members." },
Declaration_expected: { code: 1146, category: 1, key: "Declaration expected." },
Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: 1147, category: 1, key: "Import declarations in an internal module cannot reference an external module." },
Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: 1148, category: 1, key: "Cannot compile external modules unless the '--module' flag is provided." },
File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: 1, key: "File name '{0}' differs from already included file name '{1}' only in casing" },
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: 1, key: "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead." },
var_let_or_const_expected: { code: 1152, category: 1, key: "'var', 'let' or 'const' expected." },
let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1153, category: 1, key: "'let' declarations are only available when targeting ECMAScript 6 and higher." },
const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1154, category: 1, key: "'const' declarations are only available when targeting ECMAScript 6 and higher." },
const_declarations_must_be_initialized: { code: 1155, category: 1, key: "'const' declarations must be initialized" },
const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: 1, key: "'const' declarations can only be declared inside a block." },
let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: 1, key: "'let' declarations can only be declared inside a block." },
Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1159, category: 1, key: "Tagged templates are only available when targeting ECMAScript 6 and higher." },
Unterminated_template_literal: { code: 1160, category: 1, key: "Unterminated template literal." },
Unterminated_regular_expression_literal: { code: 1161, category: 1, key: "Unterminated regular expression literal." },
An_object_member_cannot_be_declared_optional: { code: 1162, category: 1, key: "An object member cannot be declared optional." },
yield_expression_must_be_contained_within_a_generator_declaration: { code: 1163, category: 1, key: "'yield' expression must be contained_within a generator declaration." },
Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: 1, key: "Computed property names are not allowed in enums." },
A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { code: 1165, category: 1, key: "A computed property name in an ambient context must directly refer to a built-in symbol." },
A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { code: 1166, category: 1, key: "A computed property name in a class property declaration must directly refer to a built-in symbol." },
Computed_property_names_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1167, category: 1, key: "Computed property names are only available when targeting ECMAScript 6 and higher." },
A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { code: 1168, category: 1, key: "A computed property name in a method overload must directly refer to a built-in symbol." },
A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { code: 1169, category: 1, key: "A computed property name in an interface must directly refer to a built-in symbol." },
A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { code: 1170, category: 1, key: "A computed property name in a type literal must directly refer to a built-in symbol." },
A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: 1, key: "A comma expression is not allowed in a computed property name." },
extends_clause_already_seen: { code: 1172, category: 1, key: "'extends' clause already seen." },
extends_clause_must_precede_implements_clause: { code: 1173, category: 1, key: "'extends' clause must precede 'implements' clause." },
Classes_can_only_extend_a_single_class: { code: 1174, category: 1, key: "Classes can only extend a single class." },
implements_clause_already_seen: { code: 1175, category: 1, key: "'implements' clause already seen." },
Interface_declaration_cannot_have_implements_clause: { code: 1176, category: 1, key: "Interface declaration cannot have 'implements' clause." },
Binary_digit_expected: { code: 1177, category: 1, key: "Binary digit expected." },
Octal_digit_expected: { code: 1178, category: 1, key: "Octal digit expected." },
Unexpected_token_expected: { code: 1179, category: 1, key: "Unexpected token. '{' expected." },
Property_destructuring_pattern_expected: { code: 1180, category: 1, key: "Property destructuring pattern expected." },
Array_element_destructuring_pattern_expected: { code: 1181, category: 1, key: "Array element destructuring pattern expected." },
A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: 1, key: "A destructuring declaration must have an initializer." },
Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: 1, key: "Destructuring declarations are not allowed in ambient contexts." },
An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: 1, key: "An implementation cannot be declared in ambient contexts." },
Modifiers_cannot_appear_here: { code: 1184, category: 1, key: "Modifiers cannot appear here." },
Merge_conflict_marker_encountered: { code: 1185, category: 1, key: "Merge conflict marker encountered." },
A_rest_element_cannot_have_an_initializer: { code: 1186, category: 1, key: "A rest element cannot have an initializer." },
A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: 1, key: "A parameter property may not be a binding pattern." },
Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { code: 1188, category: 1, key: "Only a single variable declaration is allowed in a 'for...of' statement." },
The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { code: 1189, category: 1, key: "The variable declaration of a 'for...in' statement cannot have an initializer." },
The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { code: 1190, category: 1, key: "The variable declaration of a 'for...of' statement cannot have an initializer." },
Duplicate_identifier_0: { code: 2300, category: 1, key: "Duplicate identifier '{0}'." },
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: 1, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
Static_members_cannot_reference_class_type_parameters: { code: 2302, category: 1, key: "Static members cannot reference class type parameters." },
Circular_definition_of_import_alias_0: { code: 2303, category: 1, key: "Circular definition of import alias '{0}'." },
Cannot_find_name_0: { code: 2304, category: 1, key: "Cannot find name '{0}'." },
Module_0_has_no_exported_member_1: { code: 2305, category: 1, key: "Module '{0}' has no exported member '{1}'." },
File_0_is_not_an_external_module: { code: 2306, category: 1, key: "File '{0}' is not an external module." },
Cannot_find_external_module_0: { code: 2307, category: 1, key: "Cannot find external module '{0}'." },
A_module_cannot_have_more_than_one_export_assignment: { code: 2308, category: 1, key: "A module cannot have more than one export assignment." },
An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: 1, key: "An export assignment cannot be used in a module with other exported elements." },
Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: 1, key: "Type '{0}' recursively references itself as a base type." },
A_class_may_only_extend_another_class: { code: 2311, category: 1, key: "A class may only extend another class." },
An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: 1, key: "An interface may only extend a class or another interface." },
Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2313, category: 1, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." },
Generic_type_0_requires_1_type_argument_s: { code: 2314, category: 1, key: "Generic type '{0}' requires {1} type argument(s)." },
Type_0_is_not_generic: { code: 2315, category: 1, key: "Type '{0}' is not generic." },
Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: 1, key: "Global type '{0}' must be a class or interface type." },
Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: 1, key: "Global type '{0}' must have {1} type parameter(s)." },
Cannot_find_global_type_0: { code: 2318, category: 1, key: "Cannot find global type '{0}'." },
Named_property_0_of_types_1_and_2_are_not_identical: { code: 2319, category: 1, key: "Named property '{0}' of types '{1}' and '{2}' are not identical." },
Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: 1, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." },
Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: 1, key: "Excessive stack depth comparing types '{0}' and '{1}'." },
Type_0_is_not_assignable_to_type_1: { code: 2322, category: 1, key: "Type '{0}' is not assignable to type '{1}'." },
Property_0_is_missing_in_type_1: { code: 2324, category: 1, key: "Property '{0}' is missing in type '{1}'." },
Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: 1, key: "Property '{0}' is private in type '{1}' but not in type '{2}'." },
Types_of_property_0_are_incompatible: { code: 2326, category: 1, key: "Types of property '{0}' are incompatible." },
Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: 1, key: "Property '{0}' is optional in type '{1}' but required in type '{2}'." },
Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: 1, key: "Types of parameters '{0}' and '{1}' are incompatible." },
Index_signature_is_missing_in_type_0: { code: 2329, category: 1, key: "Index signature is missing in type '{0}'." },
Index_signatures_are_incompatible: { code: 2330, category: 1, key: "Index signatures are incompatible." },
this_cannot_be_referenced_in_a_module_body: { code: 2331, category: 1, key: "'this' cannot be referenced in a module body." },
this_cannot_be_referenced_in_current_location: { code: 2332, category: 1, key: "'this' cannot be referenced in current location." },
this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: 1, key: "'this' cannot be referenced in constructor arguments." },
this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: 1, key: "'this' cannot be referenced in a static property initializer." },
super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: 1, key: "'super' can only be referenced in a derived class." },
super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: 1, key: "'super' cannot be referenced in constructor arguments." },
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: 1, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" },
super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: 1, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" },
Property_0_does_not_exist_on_type_1: { code: 2339, category: 1, key: "Property '{0}' does not exist on type '{1}'." },
Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: 1, key: "Only public and protected methods of the base class are accessible via the 'super' keyword" },
Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: 1, key: "Property '{0}' is private and only accessible within class '{1}'." },
An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { code: 2342, category: 1, key: "An index expression argument must be of type 'string', 'number', 'symbol, or 'any'." },
Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: 1, key: "Type '{0}' does not satisfy the constraint '{1}'." },
Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: 1, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." },
Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: 1, key: "Supplied parameters do not match any signature of call target." },
Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: 1, key: "Untyped function calls may not accept type arguments." },
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: 1, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" },
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: 1, key: "Cannot invoke an expression whose type lacks a call signature." },
Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: 1, key: "Only a void function can be called with the 'new' keyword." },
Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: 1, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." },
Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 2352, category: 1, key: "Neither type '{0}' nor type '{1}' is assignable to the other." },
No_best_common_type_exists_among_return_expressions: { code: 2354, category: 1, key: "No best common type exists among return expressions." },
A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2355, category: 1, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." },
An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: 1, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." },
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: 1, key: "The operand of an increment or decrement operator must be a variable, property or indexer." },
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: 1, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." },
The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: 1, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." },
The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { code: 2360, category: 1, key: "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'." },
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: 1, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" },
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: 1, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: 1, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." },
Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: 1, key: "Invalid left-hand side of assignment expression." },
Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: 1, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." },
Type_parameter_name_cannot_be_0: { code: 2368, category: 1, key: "Type parameter name cannot be '{0}'" },
A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: 1, key: "A parameter property is only allowed in a constructor implementation." },
A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: 1, key: "A rest parameter must be of an array type." },
A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: 1, key: "A parameter initializer is only allowed in a function or constructor implementation." },
Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: 1, key: "Parameter '{0}' cannot be referenced in its initializer." },
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: 1, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." },
Duplicate_string_index_signature: { code: 2374, category: 1, key: "Duplicate string index signature." },
Duplicate_number_index_signature: { code: 2375, category: 1, key: "Duplicate number index signature." },
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: 1, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." },
Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: 1, key: "Constructors for derived classes must contain a 'super' call." },
A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2378, category: 1, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." },
Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: 1, key: "Getter and setter accessors do not agree in visibility." },
get_and_set_accessor_must_have_the_same_type: { code: 2380, category: 1, key: "'get' and 'set' accessor must have the same type." },
A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: 1, key: "A signature with an implementation cannot use a string literal type." },
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: 1, key: "Specialized overload signature is not assignable to any non-specialized signature." },
Overload_signatures_must_all_be_exported_or_not_exported: { code: 2383, category: 1, key: "Overload signatures must all be exported or not exported." },
Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: 1, key: "Overload signatures must all be ambient or non-ambient." },
Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: 1, key: "Overload signatures must all be public, private or protected." },
Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: 1, key: "Overload signatures must all be optional or required." },
Function_overload_must_be_static: { code: 2387, category: 1, key: "Function overload must be static." },
Function_overload_must_not_be_static: { code: 2388, category: 1, key: "Function overload must not be static." },
Function_implementation_name_must_be_0: { code: 2389, category: 1, key: "Function implementation name must be '{0}'." },
Constructor_implementation_is_missing: { code: 2390, category: 1, key: "Constructor implementation is missing." },
Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: 1, key: "Function implementation is missing or not immediately following the declaration." },
Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: 1, key: "Multiple constructor implementations are not allowed." },
Duplicate_function_implementation: { code: 2393, category: 1, key: "Duplicate function implementation." },
Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: 1, key: "Overload signature is not compatible with function implementation." },
Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: 1, key: "Individual declarations in merged declaration {0} must be all exported or all local." },
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: 1, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." },
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: 1, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." },
Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: 1, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." },
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: 1, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." },
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: 1, key: "Expression resolves to '_super' that compiler uses to capture base class reference." },
Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: 1, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." },
The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: 1, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." },
The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: 1, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." },
Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: 1, key: "Invalid left-hand side in 'for...in' statement." },
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: 1, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." },
Setters_cannot_return_a_value: { code: 2408, category: 1, key: "Setters cannot return a value." },
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: 1, key: "Return type of constructor signature must be assignable to the instance type of the class" },
All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: 1, key: "All symbols within a 'with' block will be resolved to 'any'." },
Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: 1, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." },
Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: 1, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." },
Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: 1, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." },
Class_name_cannot_be_0: { code: 2414, category: 1, key: "Class name cannot be '{0}'" },
Class_0_incorrectly_extends_base_class_1: { code: 2415, category: 1, key: "Class '{0}' incorrectly extends base class '{1}'." },
Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: 1, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." },
Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: 2419, category: 1, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." },
Class_0_incorrectly_implements_interface_1: { code: 2420, category: 1, key: "Class '{0}' incorrectly implements interface '{1}'." },
A_class_may_only_implement_another_class_or_interface: { code: 2422, category: 1, key: "A class may only implement another class or interface." },
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: 1, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." },
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: 1, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." },
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: 1, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." },
Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: 1, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." },
Interface_name_cannot_be_0: { code: 2427, category: 1, key: "Interface name cannot be '{0}'" },
All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2428, category: 1, key: "All declarations of an interface must have identical type parameters." },
Interface_0_incorrectly_extends_interface_1: { code: 2430, category: 1, key: "Interface '{0}' incorrectly extends interface '{1}'." },
Enum_name_cannot_be_0: { code: 2431, category: 1, key: "Enum name cannot be '{0}'" },
In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: 1, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." },
A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: 1, key: "A module declaration cannot be in a different file from a class or function with which it is merged" },
A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: 1, key: "A module declaration cannot be located prior to a class or function with which it is merged" },
Ambient_external_modules_cannot_be_nested_in_other_modules: { code: 2435, category: 1, key: "Ambient external modules cannot be nested in other modules." },
Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: 1, key: "Ambient external module declaration cannot specify relative module name." },
Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: 1, key: "Module '{0}' is hidden by a local declaration with the same name" },
Import_name_cannot_be_0: { code: 2438, category: 1, key: "Import name cannot be '{0}'" },
Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2439, category: 1, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." },
Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: 1, key: "Import declaration conflicts with local declaration of '{0}'" },
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: { code: 2441, category: 1, key: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module." },
Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: 1, key: "Types have separate declarations of a private property '{0}'." },
Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: 1, key: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." },
Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: 1, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." },
Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: 1, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." },
Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: 1, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." },
The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: 1, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." },
Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: 1, key: "Block-scoped variable '{0}' used before its declaration." },
The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant: { code: 2449, category: 1, key: "The operand of an increment or decrement operator cannot be a constant." },
Left_hand_side_of_assignment_expression_cannot_be_a_constant: { code: 2450, category: 1, key: "Left-hand side of assignment expression cannot be a constant." },
Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: 1, key: "Cannot redeclare block-scoped variable '{0}'." },
An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: 1, key: "An enum member cannot have a numeric name." },
The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: 1, key: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." },
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: 1, key: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." },
Type_alias_0_circularly_references_itself: { code: 2456, category: 1, key: "Type alias '{0}' circularly references itself." },
Type_alias_name_cannot_be_0: { code: 2457, category: 1, key: "Type alias name cannot be '{0}'" },
An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: 1, key: "An AMD module cannot have multiple name assignments." },
Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: 1, key: "Type '{0}' has no property '{1}' and no string index signature." },
Type_0_has_no_property_1: { code: 2460, category: 1, key: "Type '{0}' has no property '{1}'." },
Type_0_is_not_an_array_type: { code: 2461, category: 1, key: "Type '{0}' is not an array type." },
A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: 1, key: "A rest element must be last in an array destructuring pattern" },
A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: 1, key: "A binding pattern parameter cannot be optional in an implementation signature." },
A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { code: 2464, category: 1, key: "A computed property name must be of type 'string', 'number', 'symbol', or 'any'." },
this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: 1, key: "'this' cannot be referenced in a computed property name." },
super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: 1, key: "'super' cannot be referenced in a computed property name." },
A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2467, category: 1, key: "A computed property name cannot reference a type parameter from its containing type." },
Cannot_find_global_value_0: { code: 2468, category: 1, key: "Cannot find global value '{0}'." },
The_0_operator_cannot_be_applied_to_type_symbol: { code: 2469, category: 1, key: "The '{0}' operator cannot be applied to type 'symbol'." },
Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { code: 2470, category: 1, key: "'Symbol' reference does not refer to the global Symbol constructor object." },
A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { code: 2471, category: 1, key: "A computed property name of the form '{0}' must be of type 'symbol'." },
Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_6_and_higher: { code: 2472, category: 1, key: "Spread operator in 'new' expressions is only available when targeting ECMAScript 6 and higher." },
Enum_declarations_must_all_be_const_or_non_const: { code: 2473, category: 1, key: "Enum declarations must all be const or non-const." },
In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 2474, category: 1, key: "In 'const' enum declarations member initializer must be constant expression." },
const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 2475, category: 1, key: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." },
A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 2476, category: 1, key: "A const enum member can only be accessed using a string literal." },
const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 2477, category: 1, key: "'const' enum member initializer was evaluated to a non-finite value." },
const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 2478, category: 1, key: "'const' enum member initializer was evaluated to disallowed value 'NaN'." },
Property_0_does_not_exist_on_const_enum_1: { code: 2479, category: 1, key: "Property '{0}' does not exist on 'const' enum '{1}'." },
let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { code: 2480, category: 1, key: "'let' is not allowed to be used as a name in 'let' or 'const' declarations." },
Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: { code: 2481, category: 1, key: "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'." },
for_of_statements_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 2482, category: 1, key: "'for...of' statements are only available when targeting ECMAScript 6 or higher." },
The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: { code: 2483, category: 1, key: "The left-hand side of a 'for...of' statement cannot use a type annotation." },
Import_declaration_0_is_using_private_name_1: { code: 4000, category: 1, key: "Import declaration '{0}' is using private name '{1}'." },
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: 1, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." },
Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: 1, key: "Type parameter '{0}' of exported interface has or is using private name '{1}'." },
Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: 1, key: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: 1, key: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: 1, key: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: 1, key: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." },
Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: 1, key: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." },
Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: 1, key: "Type parameter '{0}' of exported function has or is using private name '{1}'." },
Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: 1, key: "Implements clause of exported class '{0}' has or is using private name '{1}'." },
Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: 1, key: "Extends clause of exported class '{0}' has or is using private name '{1}'." },
Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: 1, key: "Extends clause of exported interface '{0}' has or is using private name '{1}'." },
Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: 1, key: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." },
Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: 1, key: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." },
Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: 1, key: "Exported variable '{0}' has or is using private name '{1}'." },
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: 1, key: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: 1, key: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: 1, key: "Public static property '{0}' of exported class has or is using private name '{1}'." },
Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: 1, key: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." },
Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: 1, key: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." },
Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: 1, key: "Public property '{0}' of exported class has or is using private name '{1}'." },
Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: 1, key: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." },
Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: 1, key: "Property '{0}' of exported interface has or is using private name '{1}'." },
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: 1, key: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: 1, key: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." },
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: 1, key: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: 1, key: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: 1, key: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: 1, key: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: 1, key: "Return type of public static property getter from exported class has or is using private name '{0}'." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: 1, key: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: 1, key: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: 1, key: "Return type of public property getter from exported class has or is using private name '{0}'." },
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: 1, key: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: 1, key: "Return type of constructor signature from exported interface has or is using private name '{0}'." },
Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: 1, key: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: 1, key: "Return type of call signature from exported interface has or is using private name '{0}'." },
Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: 1, key: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: 1, key: "Return type of index signature from exported interface has or is using private name '{0}'." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: 1, key: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: 1, key: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: 1, key: "Return type of public static method from exported class has or is using private name '{0}'." },
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: 1, key: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: 1, key: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." },
Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: 1, key: "Return type of public method from exported class has or is using private name '{0}'." },
Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: 1, key: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." },
Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: 1, key: "Return type of method from exported interface has or is using private name '{0}'." },
Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: 1, key: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." },
Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: 1, key: "Return type of exported function has or is using name '{0}' from private module '{1}'." },
Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: 1, key: "Return type of exported function has or is using private name '{0}'." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: 1, key: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." },
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: 1, key: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: 1, key: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." },
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: 1, key: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: 1, key: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: 1, key: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: 1, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: 1, key: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: 1, key: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." },
Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: 1, key: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: 1, key: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." },
Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: 1, key: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." },
Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: 1, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." },
Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: 1, key: "Parameter '{0}' of exported function has or is using private name '{1}'." },
Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: 1, key: "Exported type alias '{0}' has or is using private name '{1}'." },
The_current_host_does_not_support_the_0_option: { code: 5001, category: 1, key: "The current host does not support the '{0}' option." },
Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1, key: "Cannot find the common subdirectory path for the input files." },
Cannot_read_file_0_Colon_1: { code: 5012, category: 1, key: "Cannot read file '{0}': {1}" },
Unsupported_file_encoding: { code: 5013, category: 1, key: "Unsupported file encoding." },
Unknown_compiler_option_0: { code: 5023, category: 1, key: "Unknown compiler option '{0}'." },
Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: 1, key: "Compiler option '{0}' requires a value of type {1}." },
Could_not_write_file_0_Colon_1: { code: 5033, category: 1, key: "Could not write file '{0}': {1}" },
Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1, key: "Option 'mapRoot' cannot be specified without specifying 'sourcemap' option." },
Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1, key: "Option 'sourceRoot' cannot be specified without specifying 'sourcemap' option." },
Option_noEmit_cannot_be_specified_with_option_out_or_outDir: { code: 5040, category: 1, key: "Option 'noEmit' cannot be specified with option 'out' or 'outDir'." },
Option_noEmit_cannot_be_specified_with_option_declaration: { code: 5041, category: 1, key: "Option 'noEmit' cannot be specified with option 'declaration'." },
Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: 1, key: "Option 'project' cannot be mixed with source files on a command line." },
Concatenate_and_emit_output_to_single_file: { code: 6001, category: 2, key: "Concatenate and emit output to single file." },
Generates_corresponding_d_ts_file: { code: 6002, category: 2, key: "Generates corresponding '.d.ts' file." },
Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: 2, key: "Specifies the location where debugger should locate map files instead of generated locations." },
Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: 2, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." },
Watch_input_files: { code: 6005, category: 2, key: "Watch input files." },
Redirect_output_structure_to_the_directory: { code: 6006, category: 2, key: "Redirect output structure to the directory." },
Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: 2, key: "Do not erase const enum declarations in generated code." },
Do_not_emit_outputs_if_any_type_checking_errors_were_reported: { code: 6008, category: 2, key: "Do not emit outputs if any type checking errors were reported." },
Do_not_emit_comments_to_output: { code: 6009, category: 2, key: "Do not emit comments to output." },
Do_not_emit_outputs: { code: 6010, category: 2, key: "Do not emit outputs." },
Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental: { code: 6015, category: 2, key: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES6' (experimental)" },
Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: 2, key: "Specify module code generation: 'commonjs' or 'amd'" },
Print_this_message: { code: 6017, category: 2, key: "Print this message." },
Print_the_compiler_s_version: { code: 6019, category: 2, key: "Print the compiler's version." },
Compile_the_project_in_the_given_directory: { code: 6020, category: 2, key: "Compile the project in the given directory." },
Syntax_Colon_0: { code: 6023, category: 2, key: "Syntax: {0}" },
options: { code: 6024, category: 2, key: "options" },
file: { code: 6025, category: 2, key: "file" },
Examples_Colon_0: { code: 6026, category: 2, key: "Examples: {0}" },
Options_Colon: { code: 6027, category: 2, key: "Options:" },
Version_0: { code: 6029, category: 2, key: "Version {0}" },
Insert_command_line_options_and_files_from_a_file: { code: 6030, category: 2, key: "Insert command line options and files from a file." },
File_change_detected_Starting_incremental_compilation: { code: 6032, category: 2, key: "File change detected. Starting incremental compilation..." },
KIND: { code: 6034, category: 2, key: "KIND" },
FILE: { code: 6035, category: 2, key: "FILE" },
VERSION: { code: 6036, category: 2, key: "VERSION" },
LOCATION: { code: 6037, category: 2, key: "LOCATION" },
DIRECTORY: { code: 6038, category: 2, key: "DIRECTORY" },
Compilation_complete_Watching_for_file_changes: { code: 6042, category: 2, key: "Compilation complete. Watching for file changes." },
Generates_corresponding_map_file: { code: 6043, category: 2, key: "Generates corresponding '.map' file." },
Compiler_option_0_expects_an_argument: { code: 6044, category: 1, key: "Compiler option '{0}' expects an argument." },
Unterminated_quoted_string_in_response_file_0: { code: 6045, category: 1, key: "Unterminated quoted string in response file '{0}'." },
Argument_for_module_option_must_be_commonjs_or_amd: { code: 6046, category: 1, key: "Argument for '--module' option must be 'commonjs' or 'amd'." },
Argument_for_target_option_must_be_es3_es5_or_es6: { code: 6047, category: 1, key: "Argument for '--target' option must be 'es3', 'es5', or 'es6'." },
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: 1, key: "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'." },
Unsupported_locale_0: { code: 6049, category: 1, key: "Unsupported locale '{0}'." },
Unable_to_open_file_0: { code: 6050, category: 1, key: "Unable to open file '{0}'." },
Corrupted_locale_file_0: { code: 6051, category: 1, key: "Corrupted locale file {0}." },
Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: 2, key: "Raise error on expressions and declarations with an implied 'any' type." },
File_0_not_found: { code: 6053, category: 1, key: "File '{0}' not found." },
File_0_must_have_extension_ts_or_d_ts: { code: 6054, category: 1, key: "File '{0}' must have extension '.ts' or '.d.ts'." },
Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: 2, key: "Suppress noImplicitAny errors for indexing objects lacking index signatures." },
Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: 2, key: "Do not emit declarations for code that has an '@internal' annotation." },
Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1, key: "Variable '{0}' implicitly has an '{1}' type." },
Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1, key: "Parameter '{0}' implicitly has an '{1}' type." },
Member_0_implicitly_has_an_1_type: { code: 7008, category: 1, key: "Member '{0}' implicitly has an '{1}' type." },
new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." },
_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." },
Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." },
Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." },
Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." },
Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1, key: "Index signature of object type implicitly has an 'any' type." },
Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1, key: "Object literal's property '{0}' implicitly has an '{1}' type." },
Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1, key: "Rest parameter '{0}' implicitly has an 'any[]' type." },
Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." },
_0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 7021, category: 1, key: "'{0}' implicitly has type 'any' because it is referenced directly or indirectly in its own type annotation." },
_0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: 1, key: "'{0}' implicitly has type 'any' because it is does not have a type annotation and is referenced directly or indirectly in its own initializer." },
_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: 1, key: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: 1, key: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." },
You_cannot_rename_this_element: { code: 8000, category: 1, key: "You cannot rename this element." },
You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: 1, key: "You cannot rename elements that are defined in the standard TypeScript library." },
yield_expressions_are_not_currently_supported: { code: 9000, category: 1, key: "'yield' expressions are not currently supported." },
Generators_are_not_currently_supported: { code: 9001, category: 1, key: "Generators are not currently supported." },
The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression: { code: 9002, category: 1, key: "The 'arguments' object cannot be referenced in an arrow function. Consider using a standard function expression." },
for_of_statements_are_not_currently_supported: { code: 9003, category: 1, key: "'for...of' statements are not currently supported." }
};
})(ts || (ts = {}));
var ts;
(function (ts) {
var textToToken = {
"any": 110,
"boolean": 111,
"break": 65,
"case": 66,
"catch": 67,
"class": 68,
"continue": 70,
"const": 69,
"constructor": 112,
"debugger": 71,
"declare": 113,
"default": 72,
"delete": 73,
"do": 74,
"else": 75,
"enum": 76,
"export": 77,
"extends": 78,
"false": 79,
"finally": 80,
"for": 81,
"function": 82,
"get": 114,
"if": 83,
"implements": 101,
"import": 84,
"in": 85,
"instanceof": 86,
"interface": 102,
"let": 103,
"module": 115,
"new": 87,
"null": 88,
"number": 117,
"package": 104,
"private": 105,
"protected": 106,
"public": 107,
"require": 116,
"return": 89,
"set": 118,
"static": 108,
"string": 119,
"super": 90,
"switch": 91,
"symbol": 120,
"this": 92,
"throw": 93,
"true": 94,
"try": 95,
"type": 121,
"typeof": 96,
"var": 97,
"void": 98,
"while": 99,
"with": 100,
"yield": 109,
"of": 122,
"{": 14,
"}": 15,
"(": 16,
")": 17,
"[": 18,
"]": 19,
".": 20,
"...": 21,
";": 22,
",": 23,
"<": 24,
">": 25,
"<=": 26,
">=": 27,
"==": 28,
"!=": 29,
"===": 30,
"!==": 31,
"=>": 32,
"+": 33,
"-": 34,
"*": 35,
"/": 36,
"%": 37,
"++": 38,
"--": 39,
"<<": 40,
">>": 41,
">>>": 42,
"&": 43,
"|": 44,
"^": 45,
"!": 46,
"~": 47,
"&&": 48,
"||": 49,
"?": 50,
":": 51,
"=": 52,
"+=": 53,
"-=": 54,
"*=": 55,
"/=": 56,
"%=": 57,
"<<=": 58,
">>=": 59,
">>>=": 60,
"&=": 61,
"|=": 62,
"^=": 63
};
var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
function lookupInUnicodeMap(code, map) {
if (code < map[0]) {
return false;
}
var lo = 0;
var hi = map.length;
var mid;
while (lo + 1 < hi) {
mid = lo + (hi - lo) / 2;
mid -= mid % 2;
if (map[mid] <= code && code <= map[mid + 1]) {
return true;
}
if (code < map[mid]) {
hi = mid;
}
else {
lo = mid + 2;
}
}
return false;
}
function isUnicodeIdentifierStart(code, languageVersion) {
return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierStart) : lookupInUnicodeMap(code, unicodeES3IdentifierStart);
}
ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart;
function isUnicodeIdentifierPart(code, languageVersion) {
return languageVersion >= 1 ? lookupInUnicodeMap(code, unicodeES5IdentifierPart) : lookupInUnicodeMap(code, unicodeES3IdentifierPart);
}
function makeReverseMap(source) {
var result = [];
for (var name in source) {
if (source.hasOwnProperty(name)) {
result[source[name]] = name;
}
}
return result;
}
var tokenStrings = makeReverseMap(textToToken);
function tokenToString(t) {
return tokenStrings[t];
}
ts.tokenToString = tokenToString;
function computeLineStarts(text) {
var result = new Array();
var pos = 0;
var lineStart = 0;
while (pos < text.length) {
var ch = text.charCodeAt(pos++);
switch (ch) {
case 13:
if (text.charCodeAt(pos) === 10) {
pos++;
}
case 10:
result.push(lineStart);
lineStart = pos;
break;
default:
if (ch > 127 && isLineBreak(ch)) {
result.push(lineStart);
lineStart = pos;
}
break;
}
}
result.push(lineStart);
return result;
}
ts.computeLineStarts = computeLineStarts;
function getPositionOfLineAndCharacter(sourceFile, line, character) {
return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character);
}
ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter;
function computePositionOfLineAndCharacter(lineStarts, line, character) {
ts.Debug.assert(line >= 0 && line < lineStarts.length);
return lineStarts[line] + character;
}
ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter;
function getLineStarts(sourceFile) {
return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text));
}
ts.getLineStarts = getLineStarts;
function computeLineAndCharacterOfPosition(lineStarts, position) {
var lineNumber = ts.binarySearch(lineStarts, position);
if (lineNumber < 0) {
lineNumber = ~lineNumber - 1;
}
return {
line: lineNumber,
character: position - lineStarts[lineNumber]
};
}
ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition;
function getLineAndCharacterOfPosition(sourceFile, position) {
return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position);
}
ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition;
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isWhiteSpace(ch) {
return ch === 32 || ch === 9 || ch === 11 || ch === 12 ||
ch === 160 || ch === 5760 || ch >= 8192 && ch <= 8203 ||
ch === 8239 || ch === 8287 || ch === 12288 || ch === 65279;
}
ts.isWhiteSpace = isWhiteSpace;
function isLineBreak(ch) {
return ch === 10 || ch === 13 || ch === 8232 || ch === 8233 || ch === 133;
}
ts.isLineBreak = isLineBreak;
function isDigit(ch) {
return ch >= 48 && ch <= 57;
}
function isOctalDigit(ch) {
return ch >= 48 && ch <= 55;
}
ts.isOctalDigit = isOctalDigit;
function skipTrivia(text, pos, stopAfterLineBreak) {
while (true) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13:
if (text.charCodeAt(pos + 1) === 10) {
pos++;
}
case 10:
pos++;
if (stopAfterLineBreak) {
return pos;
}
continue;
case 9:
case 11:
case 12:
case 32:
pos++;
continue;
case 47:
if (text.charCodeAt(pos + 1) === 47) {
pos += 2;
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
continue;
}
if (text.charCodeAt(pos + 1) === 42) {
pos += 2;
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
break;
}
pos++;
}
continue;
}
break;
case 60:
case 61:
case 62:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos);
continue;
}
break;
default:
if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
pos++;
continue;
}
break;
}
return pos;
}
}
ts.skipTrivia = skipTrivia;
var mergeConflictMarkerLength = "<<<<<<<".length;
function isConflictMarkerTrivia(text, pos) {
ts.Debug.assert(pos >= 0);
if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) {
var ch = text.charCodeAt(pos);
if ((pos + mergeConflictMarkerLength) < text.length) {
for (var i = 0, n = mergeConflictMarkerLength; i < n; i++) {
if (text.charCodeAt(pos + i) !== ch) {
return false;
}
}
return ch === 61 ||
text.charCodeAt(pos + mergeConflictMarkerLength) === 32;
}
}
return false;
}
function scanConflictMarkerTrivia(text, pos, error) {
if (error) {
error(ts.Diagnostics.Merge_conflict_marker_encountered, mergeConflictMarkerLength);
}
var ch = text.charCodeAt(pos);
var len = text.length;
if (ch === 60 || ch === 62) {
while (pos < len && !isLineBreak(text.charCodeAt(pos))) {
pos++;
}
}
else {
ts.Debug.assert(ch === 61);
while (pos < len) {
var ch = text.charCodeAt(pos);
if (ch === 62 && isConflictMarkerTrivia(text, pos)) {
break;
}
pos++;
}
}
return pos;
}
function getCommentRanges(text, pos, trailing) {
var result;
var collecting = trailing || pos === 0;
while (true) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13:
if (text.charCodeAt(pos + 1) === 10)
pos++;
case 10:
pos++;
if (trailing) {
return result;
}
collecting = true;
if (result && result.length) {
result[result.length - 1].hasTrailingNewLine = true;
}
continue;
case 9:
case 11:
case 12:
case 32:
pos++;
continue;
case 47:
var nextChar = text.charCodeAt(pos + 1);
var hasTrailingNewLine = false;
if (nextChar === 47 || nextChar === 42) {
var startPos = pos;
pos += 2;
if (nextChar === 47) {
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
hasTrailingNewLine = true;
break;
}
pos++;
}
}
else {
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
break;
}
pos++;
}
}
if (collecting) {
if (!result)
result = [];
result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine });
}
continue;
}
break;
default:
if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) {
if (result && result.length && isLineBreak(ch)) {
result[result.length - 1].hasTrailingNewLine = true;
}
pos++;
continue;
}
break;
}
return result;
}
}
function getLeadingCommentRanges(text, pos) {
return getCommentRanges(text, pos, false);
}
ts.getLeadingCommentRanges = getLeadingCommentRanges;
function getTrailingCommentRanges(text, pos) {
return getCommentRanges(text, pos, true);
}
ts.getTrailingCommentRanges = getTrailingCommentRanges;
function isIdentifierStart(ch, languageVersion) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
}
ts.isIdentifierStart = isIdentifierStart;
function isIdentifierPart(ch, languageVersion) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
}
ts.isIdentifierPart = isIdentifierPart;
function createScanner(languageVersion, skipTrivia, text, onError) {
var pos;
var len;
var startPos;
var tokenPos;
var token;
var tokenValue;
var precedingLineBreak;
var tokenIsUnterminated;
function error(message, length) {
if (onError) {
onError(message, length || 0);
}
}
function isIdentifierStart(ch) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
}
function isIdentifierPart(ch) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
}
function scanNumber() {
var start = pos;
while (isDigit(text.charCodeAt(pos)))
pos++;
if (text.charCodeAt(pos) === 46) {
pos++;
while (isDigit(text.charCodeAt(pos)))
pos++;
}
var end = pos;
if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) {
pos++;
if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45)
pos++;
if (isDigit(text.charCodeAt(pos))) {
pos++;
while (isDigit(text.charCodeAt(pos)))
pos++;
end = pos;
}
else {
error(ts.Diagnostics.Digit_expected);
}
}
return +(text.substring(start, end));
}
function scanOctalDigits() {
var start = pos;
while (isOctalDigit(text.charCodeAt(pos))) {
pos++;
}
return +(text.substring(start, pos));
}
function scanHexDigits(count, mustMatchCount) {
var digits = 0;
var value = 0;
while (digits < count || !mustMatchCount) {
var ch = text.charCodeAt(pos);
if (ch >= 48 && ch <= 57) {
value = value * 16 + ch - 48;
}
else if (ch >= 65 && ch <= 70) {
value = value * 16 + ch - 65 + 10;
}
else if (ch >= 97 && ch <= 102) {
value = value * 16 + ch - 97 + 10;
}
else {
break;
}
pos++;
digits++;
}
if (digits < count) {
value = -1;
}
return value;
}
function scanString() {
var quote = text.charCodeAt(pos++);
var result = "";
var start = pos;
while (true) {
if (pos >= len) {
result += text.substring(start, pos);
tokenIsUnterminated = true;
error(ts.Diagnostics.Unterminated_string_literal);
break;
}
var ch = text.charCodeAt(pos);
if (ch === quote) {
result += text.substring(start, pos);
pos++;
break;
}
if (ch === 92) {
result += text.substring(start, pos);
result += scanEscapeSequence();
start = pos;
continue;
}
if (isLineBreak(ch)) {
result += text.substring(start, pos);
tokenIsUnterminated = true;
error(ts.Diagnostics.Unterminated_string_literal);
break;
}
pos++;
}
return result;
}
function scanTemplateAndSetTokenValue() {
var startedWithBacktick = text.charCodeAt(pos) === 96;
pos++;
var start = pos;
var contents = "";
var resultingToken;
while (true) {
if (pos >= len) {
contents += text.substring(start, pos);
tokenIsUnterminated = true;
error(ts.Diagnostics.Unterminated_template_literal);
resultingToken = startedWithBacktick ? 10 : 13;
break;
}
var currChar = text.charCodeAt(pos);
if (currChar === 96) {
contents += text.substring(start, pos);
pos++;
resultingToken = startedWithBacktick ? 10 : 13;
break;
}
if (currChar === 36 && pos + 1 < len && text.charCodeAt(pos + 1) === 123) {
contents += text.substring(start, pos);
pos += 2;
resultingToken = startedWithBacktick ? 11 : 12;
break;
}
if (currChar === 92) {
contents += text.substring(start, pos);
contents += scanEscapeSequence();
start = pos;
continue;
}
if (currChar === 13) {
contents += text.substring(start, pos);
pos++;
if (pos < len && text.charCodeAt(pos) === 10) {
pos++;
}
contents += "\n";
start = pos;
continue;
}
pos++;
}
ts.Debug.assert(resultingToken !== undefined);
tokenValue = contents;
return resultingToken;
}
function scanEscapeSequence() {
pos++;
if (pos >= len) {
error(ts.Diagnostics.Unexpected_end_of_text);
return "";
}
var ch = text.charCodeAt(pos++);
switch (ch) {
case 48:
return "\0";
case 98:
return "\b";
case 116:
return "\t";
case 110:
return "\n";
case 118:
return "\v";
case 102:
return "\f";
case 114:
return "\r";
case 39:
return "\'";
case 34:
return "\"";
case 120:
case 117:
var ch = scanHexDigits(ch === 120 ? 2 : 4, true);
if (ch >= 0) {
return String.fromCharCode(ch);
}
else {
error(ts.Diagnostics.Hexadecimal_digit_expected);
return "";
}
case 13:
if (pos < len && text.charCodeAt(pos) === 10) {
pos++;
}
case 10:
case 8232:
case 8233:
return "";
default:
return String.fromCharCode(ch);
}
}
function peekUnicodeEscape() {
if (pos + 5 < len && text.charCodeAt(pos + 1) === 117) {
var start = pos;
pos += 2;
var value = scanHexDigits(4, true);
pos = start;
return value;
}
return -1;
}
function scanIdentifierParts() {
var result = "";
var start = pos;
while (pos < len) {
var ch = text.charCodeAt(pos);
if (isIdentifierPart(ch)) {
pos++;
}
else if (ch === 92) {
ch = peekUnicodeEscape();
if (!(ch >= 0 && isIdentifierPart(ch))) {
break;
}
result += text.substring(start, pos);
result += String.fromCharCode(ch);
pos += 6;
start = pos;
}
else {
break;
}
}
result += text.substring(start, pos);
return result;
}
function getIdentifierToken() {
var len = tokenValue.length;
if (len >= 2 && len <= 11) {
var ch = tokenValue.charCodeAt(0);
if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) {
return token = textToToken[tokenValue];
}
}
return token = 64;
}
function scanBinaryOrOctalDigits(base) {
ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8");
var value = 0;
var numberOfDigits = 0;
while (true) {
var ch = text.charCodeAt(pos);
var valueOfCh = ch - 48;
if (!isDigit(ch) || valueOfCh >= base) {
break;
}
value = value * base + valueOfCh;
pos++;
numberOfDigits++;
}
if (numberOfDigits === 0) {
return -1;
}
return value;
}
function scan() {
startPos = pos;
precedingLineBreak = false;
tokenIsUnterminated = false;
while (true) {
tokenPos = pos;
if (pos >= len) {
return token = 1;
}
var ch = text.charCodeAt(pos);
switch (ch) {
case 10:
case 13:
precedingLineBreak = true;
if (skipTrivia) {
pos++;
continue;
}
else {
if (ch === 13 && pos + 1 < len && text.charCodeAt(pos + 1) === 10) {
pos += 2;
}
else {
pos++;
}
return token = 4;
}
case 9:
case 11:
case 12:
case 32:
if (skipTrivia) {
pos++;
continue;
}
else {
while (pos < len && isWhiteSpace(text.charCodeAt(pos))) {
pos++;
}
return token = 5;
}
case 33:
if (text.charCodeAt(pos + 1) === 61) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 31;
}
return pos += 2, token = 29;
}
return pos++, token = 46;
case 34:
case 39:
tokenValue = scanString();
return token = 8;
case 96:
return token = scanTemplateAndSetTokenValue();
case 37:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 57;
}
return pos++, token = 37;
case 38:
if (text.charCodeAt(pos + 1) === 38) {
return pos += 2, token = 48;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 61;
}
return pos++, token = 43;
case 40:
return pos++, token = 16;
case 41:
return pos++, token = 17;
case 42:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 55;
}
return pos++, token = 35;
case 43:
if (text.charCodeAt(pos + 1) === 43) {
return pos += 2, token = 38;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 53;
}
return pos++, token = 33;
case 44:
return pos++, token = 23;
case 45:
if (text.charCodeAt(pos + 1) === 45) {
return pos += 2, token = 39;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 54;
}
return pos++, token = 34;
case 46:
if (isDigit(text.charCodeAt(pos + 1))) {
tokenValue = "" + scanNumber();
return token = 7;
}
if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
return pos += 3, token = 21;
}
return pos++, token = 20;
case 47:
if (text.charCodeAt(pos + 1) === 47) {
pos += 2;
while (pos < len) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
if (skipTrivia) {
continue;
}
else {
return token = 2;
}
}
if (text.charCodeAt(pos + 1) === 42) {
pos += 2;
var commentClosed = false;
while (pos < len) {
var ch = text.charCodeAt(pos);
if (ch === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
commentClosed = true;
break;
}
if (isLineBreak(ch)) {
precedingLineBreak = true;
}
pos++;
}
if (!commentClosed) {
error(ts.Diagnostics.Asterisk_Slash_expected);
}
if (skipTrivia) {
continue;
}
else {
tokenIsUnterminated = !commentClosed;
return token = 3;
}
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 56;
}
return pos++, token = 36;
case 48:
if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) {
pos += 2;
var value = scanHexDigits(1, false);
if (value < 0) {
error(ts.Diagnostics.Hexadecimal_digit_expected);
value = 0;
}
tokenValue = "" + value;
return token = 7;
}
else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) {
pos += 2;
var value = scanBinaryOrOctalDigits(2);
if (value < 0) {
error(ts.Diagnostics.Binary_digit_expected);
value = 0;
}
tokenValue = "" + value;
return token = 7;
}
else if (pos + 2 < len && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) {
pos += 2;
var value = scanBinaryOrOctalDigits(8);
if (value < 0) {
error(ts.Diagnostics.Octal_digit_expected);
value = 0;
}
tokenValue = "" + value;
return token = 7;
}
if (pos + 1 < len && isOctalDigit(text.charCodeAt(pos + 1))) {
tokenValue = "" + scanOctalDigits();
return token = 7;
}
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
tokenValue = "" + scanNumber();
return token = 7;
case 58:
return pos++, token = 51;
case 59:
return pos++, token = 22;
case 60:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 6;
}
}
if (text.charCodeAt(pos + 1) === 60) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 58;
}
return pos += 2, token = 40;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 26;
}
return pos++, token = 24;
case 61:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 6;
}
}
if (text.charCodeAt(pos + 1) === 61) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 30;
}
return pos += 2, token = 28;
}
if (text.charCodeAt(pos + 1) === 62) {
return pos += 2, token = 32;
}
return pos++, token = 52;
case 62:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 6;
}
}
return pos++, token = 25;
case 63:
return pos++, token = 50;
case 91:
return pos++, token = 18;
case 93:
return pos++, token = 19;
case 94:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 63;
}
return pos++, token = 45;
case 123:
return pos++, token = 14;
case 124:
if (text.charCodeAt(pos + 1) === 124) {
return pos += 2, token = 49;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 62;
}
return pos++, token = 44;
case 125:
return pos++, token = 15;
case 126:
return pos++, token = 47;
case 92:
var ch = peekUnicodeEscape();
if (ch >= 0 && isIdentifierStart(ch)) {
pos += 6;
tokenValue = String.fromCharCode(ch) + scanIdentifierParts();
return token = getIdentifierToken();
}
error(ts.Diagnostics.Invalid_character);
return pos++, token = 0;
default:
if (isIdentifierStart(ch)) {
pos++;
while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos)))
pos++;
tokenValue = text.substring(tokenPos, pos);
if (ch === 92) {
tokenValue += scanIdentifierParts();
}
return token = getIdentifierToken();
}
else if (isWhiteSpace(ch)) {
pos++;
continue;
}
else if (isLineBreak(ch)) {
precedingLineBreak = true;
pos++;
continue;
}
error(ts.Diagnostics.Invalid_character);
return pos++, token = 0;
}
}
}
function reScanGreaterToken() {
if (token === 25) {
if (text.charCodeAt(pos) === 62) {
if (text.charCodeAt(pos + 1) === 62) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 60;
}
return pos += 2, token = 42;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 59;
}
return pos++, token = 41;
}
if (text.charCodeAt(pos) === 61) {
return pos++, token = 27;
}
}
return token;
}
function reScanSlashToken() {
if (token === 36 || token === 56) {
var p = tokenPos + 1;
var inEscape = false;
var inCharacterClass = false;
while (true) {
if (p >= len) {
tokenIsUnterminated = true;
error(ts.Diagnostics.Unterminated_regular_expression_literal);
break;
}
var ch = text.charCodeAt(p);
if (isLineBreak(ch)) {
tokenIsUnterminated = true;
error(ts.Diagnostics.Unterminated_regular_expression_literal);
break;
}
if (inEscape) {
inEscape = false;
}
else if (ch === 47 && !inCharacterClass) {
p++;
break;
}
else if (ch === 91) {
inCharacterClass = true;
}
else if (ch === 92) {
inEscape = true;
}
else if (ch === 93) {
inCharacterClass = false;
}
p++;
}
while (p < len && isIdentifierPart(text.charCodeAt(p))) {
p++;
}
pos = p;
tokenValue = text.substring(tokenPos, pos);
token = 9;
}
return token;
}
function reScanTemplateToken() {
ts.Debug.assert(token === 15, "'reScanTemplateToken' should only be called on a '}'");
pos = tokenPos;
return token = scanTemplateAndSetTokenValue();
}
function speculationHelper(callback, isLookahead) {
var savePos = pos;
var saveStartPos = startPos;
var saveTokenPos = tokenPos;
var saveToken = token;
var saveTokenValue = tokenValue;
var savePrecedingLineBreak = precedingLineBreak;
var result = callback();
if (!result || isLookahead) {
pos = savePos;
startPos = saveStartPos;
tokenPos = saveTokenPos;
token = saveToken;
tokenValue = saveTokenValue;
precedingLineBreak = savePrecedingLineBreak;
}
return result;
}
function lookAhead(callback) {
return speculationHelper(callback, true);
}
function tryScan(callback) {
return speculationHelper(callback, false);
}
function setText(newText) {
text = newText || "";
len = text.length;
setTextPos(0);
}
function setTextPos(textPos) {
pos = textPos;
startPos = textPos;
tokenPos = textPos;
token = 0;
precedingLineBreak = false;
}
setText(text);
return {
getStartPos: function () { return startPos; },
getTextPos: function () { return pos; },
getToken: function () { return token; },
getTokenPos: function () { return tokenPos; },
getTokenText: function () { return text.substring(tokenPos, pos); },
getTokenValue: function () { return tokenValue; },
hasPrecedingLineBreak: function () { return precedingLineBreak; },
isIdentifier: function () { return token === 64 || token > 100; },
isReservedWord: function () { return token >= 65 && token <= 100; },
isUnterminated: function () { return tokenIsUnterminated; },
reScanGreaterToken: reScanGreaterToken,
reScanSlashToken: reScanSlashToken,
reScanTemplateToken: reScanTemplateToken,
scan: scan,
setText: setText,
setTextPos: setTextPos,
tryScan: tryScan,
lookAhead: lookAhead
};
}
ts.createScanner = createScanner;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getDeclarationOfKind(symbol, kind) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
if (declaration.kind === kind) {
return declaration;
}
}
return undefined;
}
ts.getDeclarationOfKind = getDeclarationOfKind;
var stringWriters = [];
function getSingleLineStringWriter() {
if (stringWriters.length == 0) {
var str = "";
var writeText = function (text) { return str += text; };
return {
string: function () { return str; },
writeKeyword: writeText,
writeOperator: writeText,
writePunctuation: writeText,
writeSpace: writeText,
writeStringLiteral: writeText,
writeParameter: writeText,
writeSymbol: writeText,
writeLine: function () { return str += " "; },
increaseIndent: function () { },
decreaseIndent: function () { },
clear: function () { return str = ""; },
trackSymbol: function () { }
};
}
return stringWriters.pop();
}
ts.getSingleLineStringWriter = getSingleLineStringWriter;
function releaseStringWriter(writer) {
writer.clear();
stringWriters.push(writer);
}
ts.releaseStringWriter = releaseStringWriter;
function getFullWidth(node) {
return node.end - node.pos;
}
ts.getFullWidth = getFullWidth;
function containsParseError(node) {
aggregateChildData(node);
return (node.parserContextFlags & 32) !== 0;
}
ts.containsParseError = containsParseError;
function aggregateChildData(node) {
if (!(node.parserContextFlags & 64)) {
var thisNodeOrAnySubNodesHasError = ((node.parserContextFlags & 16) !== 0) ||
ts.forEachChild(node, containsParseError);
if (thisNodeOrAnySubNodesHasError) {
node.parserContextFlags |= 32;
}
node.parserContextFlags |= 64;
}
}
function getSourceFileOfNode(node) {
while (node && node.kind !== 210) {
node = node.parent;
}
return node;
}
ts.getSourceFileOfNode = getSourceFileOfNode;
function getStartPositionOfLine(line, sourceFile) {
ts.Debug.assert(line >= 0);
return ts.getLineStarts(sourceFile)[line];
}
ts.getStartPositionOfLine = getStartPositionOfLine;
function nodePosToString(node) {
var file = getSourceFileOfNode(node);
var loc = ts.getLineAndCharacterOfPosition(file, node.pos);
return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")";
}
ts.nodePosToString = nodePosToString;
function getStartPosOfNode(node) {
return node.pos;
}
ts.getStartPosOfNode = getStartPosOfNode;
function nodeIsMissing(node) {
if (!node) {
return true;
}
return node.pos === node.end && node.kind !== 1;
}
ts.nodeIsMissing = nodeIsMissing;
function nodeIsPresent(node) {
return !nodeIsMissing(node);
}
ts.nodeIsPresent = nodeIsPresent;
function getTokenPosOfNode(node, sourceFile) {
if (nodeIsMissing(node)) {
return node.pos;
}
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
}
ts.getTokenPosOfNode = getTokenPosOfNode;
function getSourceTextOfNodeFromSourceFile(sourceFile, node) {
if (nodeIsMissing(node)) {
return "";
}
var text = sourceFile.text;
return text.substring(ts.skipTrivia(text, node.pos), node.end);
}
ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile;
function getTextOfNodeFromSourceText(sourceText, node) {
if (nodeIsMissing(node)) {
return "";
}
return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end);
}
ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText;
function getTextOfNode(node) {
return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node);
}
ts.getTextOfNode = getTextOfNode;
function escapeIdentifier(identifier) {
return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier;
}
ts.escapeIdentifier = escapeIdentifier;
function unescapeIdentifier(identifier) {
return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier;
}
ts.unescapeIdentifier = unescapeIdentifier;
function declarationNameToString(name) {
return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
}
ts.declarationNameToString = declarationNameToString;
function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
node = getErrorSpanForNode(node);
var file = getSourceFileOfNode(node);
var start = getTokenPosOfNode(node, file);
var length = node.end - start;
return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2);
}
ts.createDiagnosticForNode = createDiagnosticForNode;
function createDiagnosticForNodeFromMessageChain(node, messageChain) {
node = getErrorSpanForNode(node);
var file = getSourceFileOfNode(node);
var start = ts.skipTrivia(file.text, node.pos);
var length = node.end - start;
return {
file: file,
start: start,
length: length,
code: messageChain.code,
category: messageChain.category,
messageText: messageChain.next ? messageChain : messageChain.messageText
};
}
ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain;
function getErrorSpanForNode(node) {
var errorSpan;
switch (node.kind) {
case 191:
case 148:
case 194:
case 195:
case 198:
case 197:
case 209:
errorSpan = node.name;
break;
}
return errorSpan && errorSpan.pos < errorSpan.end ? errorSpan : node;
}
ts.getErrorSpanForNode = getErrorSpanForNode;
function isExternalModule(file) {
return file.externalModuleIndicator !== undefined;
}
ts.isExternalModule = isExternalModule;
function isDeclarationFile(file) {
return (file.flags & 1024) !== 0;
}
ts.isDeclarationFile = isDeclarationFile;
function isConstEnumDeclaration(node) {
return node.kind === 197 && isConst(node);
}
ts.isConstEnumDeclaration = isConstEnumDeclaration;
function walkUpBindingElementsAndPatterns(node) {
while (node && (node.kind === 148 || isBindingPattern(node))) {
node = node.parent;
}
return node;
}
function getCombinedNodeFlags(node) {
node = walkUpBindingElementsAndPatterns(node);
var flags = node.flags;
if (node.kind === 191) {
node = node.parent;
}
if (node && node.kind === 192) {
flags |= node.flags;
node = node.parent;
}
if (node && node.kind === 173) {
flags |= node.flags;
}
return flags;
}
ts.getCombinedNodeFlags = getCombinedNodeFlags;
function isConst(node) {
return !!(getCombinedNodeFlags(node) & 4096);
}
ts.isConst = isConst;
function isLet(node) {
return !!(getCombinedNodeFlags(node) & 2048);
}
ts.isLet = isLet;
function isPrologueDirective(node) {
return node.kind === 175 && node.expression.kind === 8;
}
ts.isPrologueDirective = isPrologueDirective;
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
sourceFileOfNode = sourceFileOfNode || getSourceFileOfNode(node);
if (node.kind === 126 || node.kind === 125) {
return ts.concatenate(ts.getTrailingCommentRanges(sourceFileOfNode.text, node.pos), ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos));
}
else {
return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos);
}
}
ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
function getJsDocComments(node, sourceFileOfNode) {
return ts.filter(getLeadingCommentRangesOfNode(node, sourceFileOfNode), isJsDocComment);
function isJsDocComment(comment) {
return sourceFileOfNode.text.charCodeAt(comment.pos + 1) === 42 &&
sourceFileOfNode.text.charCodeAt(comment.pos + 2) === 42 &&
sourceFileOfNode.text.charCodeAt(comment.pos + 3) !== 47;
}
}
ts.getJsDocComments = getJsDocComments;
ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
function forEachReturnStatement(body, visitor) {
return traverse(body);
function traverse(node) {
switch (node.kind) {
case 184:
return visitor(node);
case 172:
case 176:
case 177:
case 178:
case 179:
case 180:
case 181:
case 185:
case 186:
case 203:
case 204:
case 187:
case 189:
case 206:
return ts.forEachChild(node, traverse);
}
}
}
ts.forEachReturnStatement = forEachReturnStatement;
function isAnyFunction(node) {
if (node) {
switch (node.kind) {
case 131:
case 158:
case 193:
case 159:
case 130:
case 129:
case 132:
case 133:
case 134:
case 135:
case 136:
case 138:
case 139:
case 158:
case 159:
case 193:
return true;
}
}
return false;
}
ts.isAnyFunction = isAnyFunction;
function isFunctionBlock(node) {
return node && node.kind === 172 && isAnyFunction(node.parent);
}
ts.isFunctionBlock = isFunctionBlock;
function isObjectLiteralMethod(node) {
return node && node.kind === 130 && node.parent.kind === 150;
}
ts.isObjectLiteralMethod = isObjectLiteralMethod;
function getContainingFunction(node) {
while (true) {
node = node.parent;
if (!node || isAnyFunction(node)) {
return node;
}
}
}
ts.getContainingFunction = getContainingFunction;
function getThisContainer(node, includeArrowFunctions) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 124:
if (node.parent.parent.kind === 194) {
return node;
}
node = node.parent;
break;
case 159:
if (!includeArrowFunctions) {
continue;
}
case 193:
case 158:
case 198:
case 128:
case 127:
case 130:
case 129:
case 131:
case 132:
case 133:
case 197:
case 210:
return node;
}
}
}
ts.getThisContainer = getThisContainer;
function getSuperContainer(node, includeFunctions) {
while (true) {
node = node.parent;
if (!node)
return node;
switch (node.kind) {
case 124:
if (node.parent.parent.kind === 194) {
return node;
}
node = node.parent;
break;
case 193:
case 158:
case 159:
if (!includeFunctions) {
continue;
}
case 128:
case 127:
case 130:
case 129:
case 131:
case 132:
case 133:
return node;
}
}
}
ts.getSuperContainer = getSuperContainer;
function getInvokedExpression(node) {
if (node.kind === 155) {
return node.tag;
}
return node.expression;
}
ts.getInvokedExpression = getInvokedExpression;
function isExpression(node) {
switch (node.kind) {
case 92:
case 90:
case 88:
case 94:
case 79:
case 9:
case 149:
case 150:
case 151:
case 152:
case 153:
case 154:
case 155:
case 156:
case 157:
case 158:
case 159:
case 162:
case 160:
case 161:
case 163:
case 164:
case 165:
case 166:
case 169:
case 167:
case 10:
case 170:
return true;
case 123:
while (node.parent.kind === 123) {
node = node.parent;
}
return node.parent.kind === 140;
case 64:
if (node.parent.kind === 140) {
return true;
}
case 7:
case 8:
var parent = node.parent;
switch (parent.kind) {
case 191:
case 126:
case 128:
case 127:
case 209:
case 207:
case 148:
return parent.initializer === node;
case 175:
case 176:
case 177:
case 178:
case 184:
case 185:
case 186:
case 203:
case 188:
case 186:
return parent.expression === node;
case 179:
var forStatement = parent;
return (forStatement.initializer === node && forStatement.initializer.kind !== 192) ||
forStatement.condition === node ||
forStatement.iterator === node;
case 180:
case 181:
var forInStatement = parent;
return (forInStatement.initializer === node && forInStatement.initializer.kind !== 192) ||
forInStatement.expression === node;
case 156:
return node === parent.expression;
case 171:
return node === parent.expression;
case 124:
return node === parent.expression;
default:
if (isExpression(parent)) {
return true;
}
}
}
return false;
}
ts.isExpression = isExpression;
function isInstantiatedModule(node, preserveConstEnums) {
var moduleState = ts.getModuleInstanceState(node);
return moduleState === 1 ||
(preserveConstEnums && moduleState === 2);
}
ts.isInstantiatedModule = isInstantiatedModule;
function isExternalModuleImportDeclaration(node) {
return node.kind === 200 && node.moduleReference.kind === 202;
}
ts.isExternalModuleImportDeclaration = isExternalModuleImportDeclaration;
function getExternalModuleImportDeclarationExpression(node) {
ts.Debug.assert(isExternalModuleImportDeclaration(node));
return node.moduleReference.expression;
}
ts.getExternalModuleImportDeclarationExpression = getExternalModuleImportDeclarationExpression;
function isInternalModuleImportDeclaration(node) {
return node.kind === 200 && node.moduleReference.kind !== 202;
}
ts.isInternalModuleImportDeclaration = isInternalModuleImportDeclaration;
function hasDotDotDotToken(node) {
return node && node.kind === 126 && node.dotDotDotToken !== undefined;
}
ts.hasDotDotDotToken = hasDotDotDotToken;
function hasQuestionToken(node) {
if (node) {
switch (node.kind) {
case 126:
return node.questionToken !== undefined;
case 130:
case 129:
return node.questionToken !== undefined;
case 208:
case 207:
case 128:
case 127:
return node.questionToken !== undefined;
}
}
return false;
}
ts.hasQuestionToken = hasQuestionToken;
function hasRestParameters(s) {
return s.parameters.length > 0 && s.parameters[s.parameters.length - 1].dotDotDotToken !== undefined;
}
ts.hasRestParameters = hasRestParameters;
function isLiteralKind(kind) {
return 7 <= kind && kind <= 10;
}
ts.isLiteralKind = isLiteralKind;
function isTextualLiteralKind(kind) {
return kind === 8 || kind === 10;
}
ts.isTextualLiteralKind = isTextualLiteralKind;
function isTemplateLiteralKind(kind) {
return 10 <= kind && kind <= 13;
}
ts.isTemplateLiteralKind = isTemplateLiteralKind;
function isBindingPattern(node) {
return node.kind === 147 || node.kind === 146;
}
ts.isBindingPattern = isBindingPattern;
function isInAmbientContext(node) {
while (node) {
if (node.flags & (2 | 1024)) {
return true;
}
node = node.parent;
}
return false;
}
ts.isInAmbientContext = isInAmbientContext;
function isDeclaration(node) {
switch (node.kind) {
case 125:
case 126:
case 191:
case 148:
case 128:
case 127:
case 207:
case 208:
case 209:
case 130:
case 129:
case 193:
case 132:
case 133:
case 131:
case 194:
case 195:
case 196:
case 197:
case 198:
case 200:
return true;
}
return false;
}
ts.isDeclaration = isDeclaration;
function isStatement(n) {
switch (n.kind) {
case 183:
case 182:
case 190:
case 177:
case 175:
case 174:
case 180:
case 181:
case 179:
case 176:
case 187:
case 184:
case 186:
case 93:
case 189:
case 173:
case 178:
case 185:
case 201:
return true;
default:
return false;
}
}
ts.isStatement = isStatement;
function isDeclarationOrFunctionExpressionOrCatchVariableName(name) {
if (name.kind !== 64 && name.kind !== 8 && name.kind !== 7) {
return false;
}
var parent = name.parent;
if (isDeclaration(parent) || parent.kind === 158) {
return parent.name === name;
}
if (parent.kind === 206) {
return parent.name === name;
}
return false;
}
ts.isDeclarationOrFunctionExpressionOrCatchVariableName = isDeclarationOrFunctionExpressionOrCatchVariableName;
function getClassBaseTypeNode(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 78);
return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
}
ts.getClassBaseTypeNode = getClassBaseTypeNode;
function getClassImplementedTypeNodes(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 101);
return heritageClause ? heritageClause.types : undefined;
}
ts.getClassImplementedTypeNodes = getClassImplementedTypeNodes;
function getInterfaceBaseTypeNodes(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 78);
return heritageClause ? heritageClause.types : undefined;
}
ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
function getHeritageClause(clauses, kind) {
if (clauses) {
for (var i = 0, n = clauses.length; i < n; i++) {
if (clauses[i].token === kind) {
return clauses[i];
}
}
}
return undefined;
}
ts.getHeritageClause = getHeritageClause;
function tryResolveScriptReference(host, sourceFile, reference) {
if (!host.getCompilerOptions().noResolve) {
var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName);
referenceFileName = ts.getNormalizedAbsolutePath(referenceFileName, host.getCurrentDirectory());
return host.getSourceFile(referenceFileName);
}
}
ts.tryResolveScriptReference = tryResolveScriptReference;
function getAncestor(node, kind) {
switch (kind) {
case 194:
while (node) {
switch (node.kind) {
case 194:
return node;
case 197:
case 195:
case 196:
case 198:
case 200:
return undefined;
default:
node = node.parent;
continue;
}
}
break;
default:
while (node) {
if (node.kind === kind) {
return node;
}
node = node.parent;
}
break;
}
return undefined;
}
ts.getAncestor = getAncestor;
function getFileReferenceFromReferencePath(comment, commentRange) {
var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
var isNoDefaultLibRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/gim;
if (simpleReferenceRegEx.exec(comment)) {
if (isNoDefaultLibRegEx.exec(comment)) {
return {
isNoDefaultLib: true
};
}
else {
var matchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment);
if (matchResult) {
var start = commentRange.pos;
var end = commentRange.end;
return {
fileReference: {
pos: start,
end: end,
fileName: matchResult[3]
},
isNoDefaultLib: false
};
}
else {
return {
diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax,
isNoDefaultLib: false
};
}
}
}
return undefined;
}
ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath;
function isKeyword(token) {
return 65 <= token && token <= 122;
}
ts.isKeyword = isKeyword;
function isTrivia(token) {
return 2 <= token && token <= 6;
}
ts.isTrivia = isTrivia;
function hasDynamicName(declaration) {
return declaration.name &&
declaration.name.kind === 124 &&
!isWellKnownSymbolSyntactically(declaration.name.expression);
}
ts.hasDynamicName = hasDynamicName;
function isWellKnownSymbolSyntactically(node) {
return node.kind === 151 && isESSymbolIdentifier(node.expression);
}
ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically;
function getPropertyNameForPropertyNameNode(name) {
if (name.kind === 64 || name.kind === 8 || name.kind === 7) {
return name.text;
}
if (name.kind === 124) {
var nameExpression = name.expression;
if (isWellKnownSymbolSyntactically(nameExpression)) {
var rightHandSideName = nameExpression.name.text;
return getPropertyNameForKnownSymbolName(rightHandSideName);
}
}
return undefined;
}
ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
function getPropertyNameForKnownSymbolName(symbolName) {
return "__@" + symbolName;
}
ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName;
function isESSymbolIdentifier(node) {
return node.kind === 64 && node.text === "Symbol";
}
ts.isESSymbolIdentifier = isESSymbolIdentifier;
function isModifier(token) {
switch (token) {
case 107:
case 105:
case 106:
case 108:
case 77:
case 113:
case 69:
return true;
}
return false;
}
ts.isModifier = isModifier;
function textSpanEnd(span) {
return span.start + span.length;
}
ts.textSpanEnd = textSpanEnd;
function textSpanIsEmpty(span) {
return span.length === 0;
}
ts.textSpanIsEmpty = textSpanIsEmpty;
function textSpanContainsPosition(span, position) {
return position >= span.start && position < textSpanEnd(span);
}
ts.textSpanContainsPosition = textSpanContainsPosition;
function textSpanContainsTextSpan(span, other) {
return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span);
}
ts.textSpanContainsTextSpan = textSpanContainsTextSpan;
function textSpanOverlapsWith(span, other) {
var overlapStart = Math.max(span.start, other.start);
var overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other));
return overlapStart < overlapEnd;
}
ts.textSpanOverlapsWith = textSpanOverlapsWith;
function textSpanOverlap(span1, span2) {
var overlapStart = Math.max(span1.start, span2.start);
var overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
if (overlapStart < overlapEnd) {
return createTextSpanFromBounds(overlapStart, overlapEnd);
}
return undefined;
}
ts.textSpanOverlap = textSpanOverlap;
function textSpanIntersectsWithTextSpan(span, other) {
return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start;
}
ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan;
function textSpanIntersectsWith(span, start, length) {
var end = start + length;
return start <= textSpanEnd(span) && end >= span.start;
}
ts.textSpanIntersectsWith = textSpanIntersectsWith;
function textSpanIntersectsWithPosition(span, position) {
return position <= textSpanEnd(span) && position >= span.start;
}
ts.textSpanIntersectsWithPosition = textSpanIntersectsWithPosition;
function textSpanIntersection(span1, span2) {
var intersectStart = Math.max(span1.start, span2.start);
var intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2));
if (intersectStart <= intersectEnd) {
return createTextSpanFromBounds(intersectStart, intersectEnd);
}
return undefined;
}
ts.textSpanIntersection = textSpanIntersection;
function createTextSpan(start, length) {
if (start < 0) {
throw new Error("start < 0");
}
if (length < 0) {
throw new Error("length < 0");
}
return { start: start, length: length };
}
ts.createTextSpan = createTextSpan;
function createTextSpanFromBounds(start, end) {
return createTextSpan(start, end - start);
}
ts.createTextSpanFromBounds = createTextSpanFromBounds;
function textChangeRangeNewSpan(range) {
return createTextSpan(range.span.start, range.newLength);
}
ts.textChangeRangeNewSpan = textChangeRangeNewSpan;
function textChangeRangeIsUnchanged(range) {
return textSpanIsEmpty(range.span) && range.newLength === 0;
}
ts.textChangeRangeIsUnchanged = textChangeRangeIsUnchanged;
function createTextChangeRange(span, newLength) {
if (newLength < 0) {
throw new Error("newLength < 0");
}
return { span: span, newLength: newLength };
}
ts.createTextChangeRange = createTextChangeRange;
ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0);
function collapseTextChangeRangesAcrossMultipleVersions(changes) {
if (changes.length === 0) {
return ts.unchangedTextChangeRange;
}
if (changes.length === 1) {
return changes[0];
}
var change0 = changes[0];
var oldStartN = change0.span.start;
var oldEndN = textSpanEnd(change0.span);
var newEndN = oldStartN + change0.newLength;
for (var i = 1; i < changes.length; i++) {
var nextChange = changes[i];
var oldStart1 = oldStartN;
var oldEnd1 = oldEndN;
var newEnd1 = newEndN;
var oldStart2 = nextChange.span.start;
var oldEnd2 = textSpanEnd(nextChange.span);
var newEnd2 = oldStart2 + nextChange.newLength;
oldStartN = Math.min(oldStart1, oldStart2);
oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1));
newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2));
}
return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN);
}
ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
function createDiagnosticCollection() {
var nonFileDiagnostics = [];
var fileDiagnostics = {};
var diagnosticsModified = false;
var modificationCount = 0;
return {
add: add,
getGlobalDiagnostics: getGlobalDiagnostics,
getDiagnostics: getDiagnostics,
getModificationCount: getModificationCount
};
function getModificationCount() {
return modificationCount;
}
function add(diagnostic) {
var diagnostics;
if (diagnostic.file) {
diagnostics = fileDiagnostics[diagnostic.file.fileName];
if (!diagnostics) {
diagnostics = [];
fileDiagnostics[diagnostic.file.fileName] = diagnostics;
}
}
else {
diagnostics = nonFileDiagnostics;
}
diagnostics.push(diagnostic);
diagnosticsModified = true;
modificationCount++;
}
function getGlobalDiagnostics() {
sortAndDeduplicate();
return nonFileDiagnostics;
}
function getDiagnostics(fileName) {
sortAndDeduplicate();
if (fileName) {
return fileDiagnostics[fileName] || [];
}
var allDiagnostics = [];
function pushDiagnostic(d) {
allDiagnostics.push(d);
}
ts.forEach(nonFileDiagnostics, pushDiagnostic);
for (var key in fileDiagnostics) {
if (ts.hasProperty(fileDiagnostics, key)) {
ts.forEach(fileDiagnostics[key], pushDiagnostic);
}
}
return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
}
function sortAndDeduplicate() {
if (!diagnosticsModified) {
return;
}
diagnosticsModified = false;
nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics);
for (var key in fileDiagnostics) {
if (ts.hasProperty(fileDiagnostics, key)) {
fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]);
}
}
}
}
ts.createDiagnosticCollection = createDiagnosticCollection;
})(ts || (ts = {}));
var ts;
(function (ts) {
var nodeConstructors = new Array(212);
ts.parseTime = 0;
function getNodeConstructor(kind) {
return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind));
}
ts.getNodeConstructor = getNodeConstructor;
function createNode(kind) {
return new (getNodeConstructor(kind))();
}
ts.createNode = createNode;
function visitNode(cbNode, node) {
if (node) {
return cbNode(node);
}
}
function visitNodeArray(cbNodes, nodes) {
if (nodes) {
return cbNodes(nodes);
}
}
function visitEachNode(cbNode, nodes) {
if (nodes) {
for (var i = 0, len = nodes.length; i < len; i++) {
var result = cbNode(nodes[i]);
if (result) {
return result;
}
}
}
}
function forEachChild(node, cbNode, cbNodeArray) {
if (!node) {
return;
}
var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode;
var cbNodes = cbNodeArray || cbNode;
switch (node.kind) {
case 123:
return visitNode(cbNode, node.left) ||
visitNode(cbNode, node.right);
case 125:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.constraint) ||
visitNode(cbNode, node.expression);
case 126:
case 128:
case 127:
case 207:
case 208:
case 191:
case 148:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.propertyName) ||
visitNode(cbNode, node.dotDotDotToken) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.questionToken) ||
visitNode(cbNode, node.type) ||
visitNode(cbNode, node.initializer);
case 138:
case 139:
case 134:
case 135:
case 136:
return visitNodes(cbNodes, node.modifiers) ||
visitNodes(cbNodes, node.typeParameters) ||
visitNodes(cbNodes, node.parameters) ||
visitNode(cbNode, node.type);
case 130:
case 129:
case 131:
case 132:
case 133:
case 158:
case 193:
case 159:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.asteriskToken) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.questionToken) ||
visitNodes(cbNodes, node.typeParameters) ||
visitNodes(cbNodes, node.parameters) ||
visitNode(cbNode, node.type) ||
visitNode(cbNode, node.body);
case 137:
return visitNode(cbNode, node.typeName) ||
visitNodes(cbNodes, node.typeArguments);
case 140:
return visitNode(cbNode, node.exprName);
case 141:
return visitNodes(cbNodes, node.members);
case 142:
return visitNode(cbNode, node.elementType);
case 143:
return visitNodes(cbNodes, node.elementTypes);
case 144:
return visitNodes(cbNodes, node.types);
case 145:
return visitNode(cbNode, node.type);
case 146:
case 147:
return visitNodes(cbNodes, node.elements);
case 149:
return visitNodes(cbNodes, node.elements);
case 150:
return visitNodes(cbNodes, node.properties);
case 151:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.name);
case 152:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.argumentExpression);
case 153:
case 154:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNodes, node.typeArguments) ||
visitNodes(cbNodes, node.arguments);
case 155:
return visitNode(cbNode, node.tag) ||
visitNode(cbNode, node.template);
case 156:
return visitNode(cbNode, node.type) ||
visitNode(cbNode, node.expression);
case 157:
return visitNode(cbNode, node.expression);
case 160:
return visitNode(cbNode, node.expression);
case 161:
return visitNode(cbNode, node.expression);
case 162:
return visitNode(cbNode, node.expression);
case 163:
return visitNode(cbNode, node.operand);
case 168:
return visitNode(cbNode, node.asteriskToken) ||
visitNode(cbNode, node.expression);
case 164:
return visitNode(cbNode, node.operand);
case 165:
return visitNode(cbNode, node.left) ||
visitNode(cbNode, node.operatorToken) ||
visitNode(cbNode, node.right);
case 166:
return visitNode(cbNode, node.condition) ||
visitNode(cbNode, node.whenTrue) ||
visitNode(cbNode, node.whenFalse);
case 169:
return visitNode(cbNode, node.expression);
case 172:
case 199:
return visitNodes(cbNodes, node.statements);
case 210:
return visitNodes(cbNodes, node.statements) ||
visitNode(cbNode, node.endOfFileToken);
case 173:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.declarationList);
case 192:
return visitNodes(cbNodes, node.declarations);
case 175:
return visitNode(cbNode, node.expression);
case 176:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.thenStatement) ||
visitNode(cbNode, node.elseStatement);
case 177:
return visitNode(cbNode, node.statement) ||
visitNode(cbNode, node.expression);
case 178:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 179:
return visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.condition) ||
visitNode(cbNode, node.iterator) ||
visitNode(cbNode, node.statement);
case 180:
return visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 181:
return visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 182:
case 183:
return visitNode(cbNode, node.label);
case 184:
return visitNode(cbNode, node.expression);
case 185:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 186:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNodes, node.clauses);
case 203:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNodes, node.statements);
case 204:
return visitNodes(cbNodes, node.statements);
case 187:
return visitNode(cbNode, node.label) ||
visitNode(cbNode, node.statement);
case 188:
return visitNode(cbNode, node.expression);
case 189:
return visitNode(cbNode, node.tryBlock) ||
visitNode(cbNode, node.catchClause) ||
visitNode(cbNode, node.finallyBlock);
case 206:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.type) ||
visitNode(cbNode, node.block);
case 194:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNodes, node.typeParameters) ||
visitNodes(cbNodes, node.heritageClauses) ||
visitNodes(cbNodes, node.members);
case 195:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNodes, node.typeParameters) ||
visitNodes(cbNodes, node.heritageClauses) ||
visitNodes(cbNodes, node.members);
case 196:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.type);
case 197:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNodes, node.members);
case 209:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.initializer);
case 198:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.body);
case 200:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.moduleReference);
case 201:
return visitNodes(cbNodes, node.modifiers) ||
visitNode(cbNode, node.exportName);
case 167:
return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans);
case 171:
return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
case 124:
return visitNode(cbNode, node.expression);
case 205:
return visitNodes(cbNodes, node.types);
case 202:
return visitNode(cbNode, node.expression);
}
}
ts.forEachChild = forEachChild;
var ParsingContext;
(function (ParsingContext) {
ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements";
ParsingContext[ParsingContext["ModuleElements"] = 1] = "ModuleElements";
ParsingContext[ParsingContext["BlockStatements"] = 2] = "BlockStatements";
ParsingContext[ParsingContext["SwitchClauses"] = 3] = "SwitchClauses";
ParsingContext[ParsingContext["SwitchClauseStatements"] = 4] = "SwitchClauseStatements";
ParsingContext[ParsingContext["TypeMembers"] = 5] = "TypeMembers";
ParsingContext[ParsingContext["ClassMembers"] = 6] = "ClassMembers";
ParsingContext[ParsingContext["EnumMembers"] = 7] = "EnumMembers";
ParsingContext[ParsingContext["TypeReferences"] = 8] = "TypeReferences";
ParsingContext[ParsingContext["VariableDeclarations"] = 9] = "VariableDeclarations";
ParsingContext[ParsingContext["ObjectBindingElements"] = 10] = "ObjectBindingElements";
ParsingContext[ParsingContext["ArrayBindingElements"] = 11] = "ArrayBindingElements";
ParsingContext[ParsingContext["ArgumentExpressions"] = 12] = "ArgumentExpressions";
ParsingContext[ParsingContext["ObjectLiteralMembers"] = 13] = "ObjectLiteralMembers";
ParsingContext[ParsingContext["ArrayLiteralMembers"] = 14] = "ArrayLiteralMembers";
ParsingContext[ParsingContext["Parameters"] = 15] = "Parameters";
ParsingContext[ParsingContext["TypeParameters"] = 16] = "TypeParameters";
ParsingContext[ParsingContext["TypeArguments"] = 17] = "TypeArguments";
ParsingContext[ParsingContext["TupleElementTypes"] = 18] = "TupleElementTypes";
ParsingContext[ParsingContext["HeritageClauses"] = 19] = "HeritageClauses";
ParsingContext[ParsingContext["Count"] = 20] = "Count";
})(ParsingContext || (ParsingContext = {}));
var Tristate;
(function (Tristate) {
Tristate[Tristate["False"] = 0] = "False";
Tristate[Tristate["True"] = 1] = "True";
Tristate[Tristate["Unknown"] = 2] = "Unknown";
})(Tristate || (Tristate = {}));
function parsingContextErrors(context) {
switch (context) {
case 0: return ts.Diagnostics.Declaration_or_statement_expected;
case 1: return ts.Diagnostics.Declaration_or_statement_expected;
case 2: return ts.Diagnostics.Statement_expected;
case 3: return ts.Diagnostics.case_or_default_expected;
case 4: return ts.Diagnostics.Statement_expected;
case 5: return ts.Diagnostics.Property_or_signature_expected;
case 6: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
case 7: return ts.Diagnostics.Enum_member_expected;
case 8: return ts.Diagnostics.Type_reference_expected;
case 9: return ts.Diagnostics.Variable_declaration_expected;
case 10: return ts.Diagnostics.Property_destructuring_pattern_expected;
case 11: return ts.Diagnostics.Array_element_destructuring_pattern_expected;
case 12: return ts.Diagnostics.Argument_expression_expected;
case 13: return ts.Diagnostics.Property_assignment_expected;
case 14: return ts.Diagnostics.Expression_or_comma_expected;
case 15: return ts.Diagnostics.Parameter_declaration_expected;
case 16: return ts.Diagnostics.Type_parameter_declaration_expected;
case 17: return ts.Diagnostics.Type_argument_expected;
case 18: return ts.Diagnostics.Type_expected;
case 19: return ts.Diagnostics.Unexpected_token_expected;
}
}
;
function modifierToFlag(token) {
switch (token) {
case 108: return 128;
case 107: return 16;
case 106: return 64;
case 105: return 32;
case 77: return 1;
case 113: return 2;
case 69: return 4096;
}
return 0;
}
ts.modifierToFlag = modifierToFlag;
function fixupParentReferences(sourceFile) {
var parent = sourceFile;
forEachChild(sourceFile, visitNode);
return;
function visitNode(n) {
if (n.parent !== parent) {
n.parent = parent;
var saveParent = parent;
parent = n;
forEachChild(n, visitNode);
parent = saveParent;
}
}
}
function shouldCheckNode(node) {
switch (node.kind) {
case 8:
case 7:
case 64:
return true;
}
return false;
}
function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) {
if (isArray) {
visitArray(element);
}
else {
visitNode(element);
}
return;
function visitNode(node) {
if (aggressiveChecks && shouldCheckNode(node)) {
var text = oldText.substring(node.pos, node.end);
}
node._children = undefined;
node.pos += delta;
node.end += delta;
if (aggressiveChecks && shouldCheckNode(node)) {
ts.Debug.assert(text === newText.substring(node.pos, node.end));
}
forEachChild(node, visitNode, visitArray);
checkNodePositions(node, aggressiveChecks);
}
function visitArray(array) {
array._children = undefined;
array.pos += delta;
array.end += delta;
for (var i = 0, n = array.length; i < n; i++) {
visitNode(array[i]);
}
}
}
function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) {
ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range");
ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range");
ts.Debug.assert(element.pos <= element.end);
element.pos = Math.min(element.pos, changeRangeNewEnd);
if (element.end >= changeRangeOldEnd) {
element.end += delta;
}
else {
element.end = Math.min(element.end, changeRangeNewEnd);
}
ts.Debug.assert(element.pos <= element.end);
if (element.parent) {
ts.Debug.assert(element.pos >= element.parent.pos);
ts.Debug.assert(element.end <= element.parent.end);
}
}
function checkNodePositions(node, aggressiveChecks) {
if (aggressiveChecks) {
var pos = node.pos;
forEachChild(node, function (child) {
ts.Debug.assert(child.pos >= pos);
pos = child.end;
});
ts.Debug.assert(pos <= node.end);
}
}
function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) {
visitNode(sourceFile);
return;
function visitNode(child) {
ts.Debug.assert(child.pos <= child.end);
if (child.pos > changeRangeOldEnd) {
moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks);
return;
}
var fullEnd = child.end;
if (fullEnd >= changeStart) {
child.intersectsChange = true;
child._children = undefined;
adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
forEachChild(child, visitNode, visitArray);
checkNodePositions(child, aggressiveChecks);
return;
}
ts.Debug.assert(fullEnd < changeStart);
}
function visitArray(array) {
ts.Debug.assert(array.pos <= array.end);
if (array.pos > changeRangeOldEnd) {
moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks);
return;
}
var fullEnd = array.end;
if (fullEnd >= changeStart) {
array.intersectsChange = true;
array._children = undefined;
adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
for (var i = 0, n = array.length; i < n; i++) {
visitNode(array[i]);
}
return;
}
ts.Debug.assert(fullEnd < changeStart);
}
}
function extendToAffectedRange(sourceFile, changeRange) {
var maxLookahead = 1;
var start = changeRange.span.start;
for (var i = 0; start > 0 && i <= maxLookahead; i++) {
var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start);
ts.Debug.assert(nearestNode.pos <= start);
var position = nearestNode.pos;
start = Math.max(0, position - 1);
}
var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span));
var finalLength = changeRange.newLength + (changeRange.span.start - start);
return ts.createTextChangeRange(finalSpan, finalLength);
}
function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) {
var bestResult = sourceFile;
var lastNodeEntirelyBeforePosition;
forEachChild(sourceFile, visit);
if (lastNodeEntirelyBeforePosition) {
var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition);
if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) {
bestResult = lastChildOfLastEntireNodeBeforePosition;
}
}
return bestResult;
function getLastChild(node) {
while (true) {
var lastChild = getLastChildWorker(node);
if (lastChild) {
node = lastChild;
}
else {
return node;
}
}
}
function getLastChildWorker(node) {
var last = undefined;
forEachChild(node, function (child) {
if (ts.nodeIsPresent(child)) {
last = child;
}
});
return last;
}
function visit(child) {
if (ts.nodeIsMissing(child)) {
return;
}
if (child.pos <= position) {
if (child.pos >= bestResult.pos) {
bestResult = child;
}
if (position < child.end) {
forEachChild(child, visit);
return true;
}
else {
ts.Debug.assert(child.end <= position);
lastNodeEntirelyBeforePosition = child;
}
}
else {
ts.Debug.assert(child.pos > position);
return true;
}
}
}
function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) {
var oldText = sourceFile.text;
if (textChangeRange) {
ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length);
if (aggressiveChecks || ts.Debug.shouldAssert(3)) {
var oldTextPrefix = oldText.substr(0, textChangeRange.span.start);
var newTextPrefix = newText.substr(0, textChangeRange.span.start);
ts.Debug.assert(oldTextPrefix === newTextPrefix);
var oldTextSuffix = oldText.substring(ts.textSpanEnd(textChangeRange.span), oldText.length);
var newTextSuffix = newText.substring(ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)), newText.length);
ts.Debug.assert(oldTextSuffix === newTextSuffix);
}
}
}
function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2);
checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks);
if (ts.textChangeRangeIsUnchanged(textChangeRange)) {
return sourceFile;
}
if (sourceFile.statements.length === 0) {
return parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true);
}
var incrementalSourceFile = sourceFile;
ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed);
incrementalSourceFile.hasBeenIncrementallyParsed = true;
var oldText = sourceFile.text;
var syntaxCursor = createSyntaxCursor(sourceFile);
var changeRange = extendToAffectedRange(sourceFile, textChangeRange);
checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks);
ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start);
ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span));
ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)));
var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length;
updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks);
var result = parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true);
return result;
}
ts.updateSourceFile = updateSourceFile;
function isEvalOrArgumentsIdentifier(node) {
return node.kind === 64 &&
(node.text === "eval" || node.text === "arguments");
}
ts.isEvalOrArgumentsIdentifier = isEvalOrArgumentsIdentifier;
function isUseStrictPrologueDirective(sourceFile, node) {
ts.Debug.assert(ts.isPrologueDirective(node));
var nodeText = ts.getSourceTextOfNodeFromSourceFile(sourceFile, node.expression);
return nodeText === '"use strict"' || nodeText === "'use strict'";
}
var InvalidPosition;
(function (InvalidPosition) {
InvalidPosition[InvalidPosition["Value"] = -1] = "Value";
})(InvalidPosition || (InvalidPosition = {}));
function createSyntaxCursor(sourceFile) {
var currentArray = sourceFile.statements;
var currentArrayIndex = 0;
ts.Debug.assert(currentArrayIndex < currentArray.length);
var current = currentArray[currentArrayIndex];
var lastQueriedPosition = -1;
return {
currentNode: function (position) {
if (position !== lastQueriedPosition) {
if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) {
currentArrayIndex++;
current = currentArray[currentArrayIndex];
}
if (!current || current.pos !== position) {
findHighestListElementThatStartsAtPosition(position);
}
}
lastQueriedPosition = position;
ts.Debug.assert(!current || current.pos === position);
return current;
}
};
function findHighestListElementThatStartsAtPosition(position) {
currentArray = undefined;
currentArrayIndex = -1;
current = undefined;
forEachChild(sourceFile, visitNode, visitArray);
return;
function visitNode(node) {
if (position >= node.pos && position < node.end) {
forEachChild(node, visitNode, visitArray);
return true;
}
return false;
}
function visitArray(array) {
if (position >= array.pos && position < array.end) {
for (var i = 0, n = array.length; i < n; i++) {
var child = array[i];
if (child) {
if (child.pos === position) {
currentArray = array;
currentArrayIndex = i;
current = child;
return true;
}
else {
if (child.pos < position && position < child.end) {
forEachChild(child, visitNode, visitArray);
return true;
}
}
}
}
}
return false;
}
}
}
function createSourceFile(fileName, sourceText, languageVersion, setParentNodes) {
if (setParentNodes === void 0) { setParentNodes = false; }
var start = new Date().getTime();
var result = parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes);
ts.parseTime += new Date().getTime() - start;
return result;
}
ts.createSourceFile = createSourceFile;
function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes) {
if (setParentNodes === void 0) { setParentNodes = false; }
var parsingContext = 0;
var identifiers = {};
var identifierCount = 0;
var nodeCount = 0;
var token;
var sourceFile = createNode(210, 0);
sourceFile.pos = 0;
sourceFile.end = sourceText.length;
sourceFile.text = sourceText;
sourceFile.parseDiagnostics = [];
sourceFile.bindDiagnostics = [];
sourceFile.languageVersion = languageVersion;
sourceFile.fileName = ts.normalizePath(fileName);
sourceFile.flags = ts.fileExtensionIs(sourceFile.fileName, ".d.ts") ? 1024 : 0;
var contextFlags = 0;
var parseErrorBeforeNextFinishedNode = false;
var scanner = ts.createScanner(languageVersion, true, sourceText, scanError);
token = nextToken();
processReferenceComments(sourceFile);
sourceFile.statements = parseList(0, true, parseSourceElement);
ts.Debug.assert(token === 1);
sourceFile.endOfFileToken = parseTokenNode();
setExternalModuleIndicator(sourceFile);
sourceFile.nodeCount = nodeCount;
sourceFile.identifierCount = identifierCount;
sourceFile.identifiers = identifiers;
if (setParentNodes) {
fixupParentReferences(sourceFile);
}
syntaxCursor = undefined;
return sourceFile;
function setContextFlag(val, flag) {
if (val) {
contextFlags |= flag;
}
else {
contextFlags &= ~flag;
}
}
function setStrictModeContext(val) {
setContextFlag(val, 1);
}
function setDisallowInContext(val) {
setContextFlag(val, 2);
}
function setYieldContext(val) {
setContextFlag(val, 4);
}
function setGeneratorParameterContext(val) {
setContextFlag(val, 8);
}
function allowInAnd(func) {
if (contextFlags & 2) {
setDisallowInContext(false);
var result = func();
setDisallowInContext(true);
return result;
}
return func();
}
function disallowInAnd(func) {
if (contextFlags & 2) {
return func();
}
setDisallowInContext(true);
var result = func();
setDisallowInContext(false);
return result;
}
function doInYieldContext(func) {
if (contextFlags & 4) {
return func();
}
setYieldContext(true);
var result = func();
setYieldContext(false);
return result;
}
function doOutsideOfYieldContext(func) {
if (contextFlags & 4) {
setYieldContext(false);
var result = func();
setYieldContext(true);
return result;
}
return func();
}
function inYieldContext() {
return (contextFlags & 4) !== 0;
}
function inStrictModeContext() {
return (contextFlags & 1) !== 0;
}
function inGeneratorParameterContext() {
return (contextFlags & 8) !== 0;
}
function inDisallowInContext() {
return (contextFlags & 2) !== 0;
}
function parseErrorAtCurrentToken(message, arg0) {
var start = scanner.getTokenPos();
var length = scanner.getTextPos() - start;
parseErrorAtPosition(start, length, message, arg0);
}
function parseErrorAtPosition(start, length, message, arg0) {
var lastError = ts.lastOrUndefined(sourceFile.parseDiagnostics);
if (!lastError || start !== lastError.start) {
sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0));
}
parseErrorBeforeNextFinishedNode = true;
}
function scanError(message, length) {
var pos = scanner.getTextPos();
parseErrorAtPosition(pos, length || 0, message);
}
function getNodePos() {
return scanner.getStartPos();
}
function getNodeEnd() {
return scanner.getStartPos();
}
function nextToken() {
return token = scanner.scan();
}
function getTokenPos(pos) {
return ts.skipTrivia(sourceText, pos);
}
function reScanGreaterToken() {
return token = scanner.reScanGreaterToken();
}
function reScanSlashToken() {
return token = scanner.reScanSlashToken();
}
function reScanTemplateToken() {
return token = scanner.reScanTemplateToken();
}
function speculationHelper(callback, isLookAhead) {
var saveToken = token;
var saveParseDiagnosticsLength = sourceFile.parseDiagnostics.length;
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
var saveContextFlags = contextFlags;
var result = isLookAhead ? scanner.lookAhead(callback) : scanner.tryScan(callback);
ts.Debug.assert(saveContextFlags === contextFlags);
if (!result || isLookAhead) {
token = saveToken;
sourceFile.parseDiagnostics.length = saveParseDiagnosticsLength;
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
}
return result;
}
function lookAhead(callback) {
return speculationHelper(callback, true);
}
function tryParse(callback) {
return speculationHelper(callback, false);
}
function isIdentifier() {
if (token === 64) {
return true;
}
if (token === 109 && inYieldContext()) {
return false;
}
return inStrictModeContext() ? token > 109 : token > 100;
}
function parseExpected(kind, diagnosticMessage) {
if (token === kind) {
nextToken();
return true;
}
if (diagnosticMessage) {
parseErrorAtCurrentToken(diagnosticMessage);
}
else {
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind));
}
return false;
}
function parseOptional(t) {
if (token === t) {
nextToken();
return true;
}
return false;
}
function parseOptionalToken(t) {
if (token === t) {
var node = createNode(t);
nextToken();
return finishNode(node);
}
return undefined;
}
function parseTokenNode() {
var node = createNode(token);
nextToken();
return finishNode(node);
}
function canParseSemicolon() {
if (token === 22) {
return true;
}
return token === 15 || token === 1 || scanner.hasPrecedingLineBreak();
}
function parseSemicolon() {
if (canParseSemicolon()) {
if (token === 22) {
nextToken();
}
return true;
}
else {
return parseExpected(22);
}
}
function createNode(kind, pos) {
nodeCount++;
var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))();
if (!(pos >= 0)) {
pos = scanner.getStartPos();
}
node.pos = pos;
node.end = pos;
return node;
}
function finishNode(node) {
node.end = scanner.getStartPos();
if (contextFlags) {
node.parserContextFlags = contextFlags;
}
if (parseErrorBeforeNextFinishedNode) {
parseErrorBeforeNextFinishedNode = false;
node.parserContextFlags |= 16;
}
return node;
}
function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) {
if (reportAtCurrentPosition) {
parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0);
}
else {
parseErrorAtCurrentToken(diagnosticMessage, arg0);
}
var result = createNode(kind, scanner.getStartPos());
result.text = "";
return finishNode(result);
}
function internIdentifier(text) {
text = ts.escapeIdentifier(text);
return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text);
}
function createIdentifier(isIdentifier, diagnosticMessage) {
identifierCount++;
if (isIdentifier) {
var node = createNode(64);
node.text = internIdentifier(scanner.getTokenValue());
nextToken();
return finishNode(node);
}
return createMissingNode(64, false, diagnosticMessage || ts.Diagnostics.Identifier_expected);
}
function parseIdentifier(diagnosticMessage) {
return createIdentifier(isIdentifier(), diagnosticMessage);
}
function parseIdentifierName() {
return createIdentifier(isIdentifierOrKeyword());
}
function isLiteralPropertyName() {
return isIdentifierOrKeyword() ||
token === 8 ||
token === 7;
}
function parsePropertyName() {
if (token === 8 || token === 7) {
return parseLiteralNode(true);
}
if (token === 18) {
return parseComputedPropertyName();
}
return parseIdentifierName();
}
function parseComputedPropertyName() {
var node = createNode(124);
parseExpected(18);
var yieldContext = inYieldContext();
if (inGeneratorParameterContext()) {
setYieldContext(false);
}
node.expression = allowInAnd(parseExpression);
if (inGeneratorParameterContext()) {
setYieldContext(yieldContext);
}
parseExpected(19);
return finishNode(node);
}
function parseContextualModifier(t) {
return token === t && tryParse(nextTokenCanFollowModifier);
}
function nextTokenCanFollowModifier() {
nextToken();
return canFollowModifier();
}
function parseAnyContextualModifier() {
return ts.isModifier(token) && tryParse(nextTokenCanFollowContextualModifier);
}
function nextTokenCanFollowContextualModifier() {
if (token === 69) {
return nextToken() === 76;
}
nextToken();
return canFollowModifier();
}
function canFollowModifier() {
return token === 18 || token === 14 || token === 35 || isLiteralPropertyName();
}
function isListElement(parsingContext, inErrorRecovery) {
var node = currentNode(parsingContext);
if (node) {
return true;
}
switch (parsingContext) {
case 0:
case 1:
return isSourceElement(inErrorRecovery);
case 2:
case 4:
return isStartOfStatement(inErrorRecovery);
case 3:
return token === 66 || token === 72;
case 5:
return isStartOfTypeMember();
case 6:
return lookAhead(isClassMemberStart);
case 7:
return token === 18 || isLiteralPropertyName();
case 13:
return token === 18 || token === 35 || isLiteralPropertyName();
case 10:
return isLiteralPropertyName();
case 8:
return isIdentifier() && !isNotHeritageClauseTypeName();
case 9:
return isIdentifierOrPattern();
case 11:
return token === 23 || token === 21 || isIdentifierOrPattern();
case 16:
return isIdentifier();
case 12:
case 14:
return token === 23 || token === 21 || isStartOfExpression();
case 15:
return isStartOfParameter();
case 17:
case 18:
return token === 23 || isStartOfType();
case 19:
return isHeritageClause();
}
ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
}
function nextTokenIsIdentifier() {
nextToken();
return isIdentifier();
}
function isNotHeritageClauseTypeName() {
if (token === 101 ||
token === 78) {
return lookAhead(nextTokenIsIdentifier);
}
return false;
}
function isListTerminator(kind) {
if (token === 1) {
return true;
}
switch (kind) {
case 1:
case 2:
case 3:
case 5:
case 6:
case 7:
case 13:
case 10:
return token === 15;
case 4:
return token === 15 || token === 66 || token === 72;
case 8:
return token === 14 || token === 78 || token === 101;
case 9:
return isVariableDeclaratorListTerminator();
case 16:
return token === 25 || token === 16 || token === 14 || token === 78 || token === 101;
case 12:
return token === 17 || token === 22;
case 14:
case 18:
case 11:
return token === 19;
case 15:
return token === 17 || token === 19;
case 17:
return token === 25 || token === 16;
case 19:
return token === 14 || token === 15;
}
}
function isVariableDeclaratorListTerminator() {
if (canParseSemicolon()) {
return true;
}
if (isInOrOfKeyword(token)) {
return true;
}
if (token === 32) {
return true;
}
return false;
}
function isInSomeParsingContext() {
for (var kind = 0; kind < 20; kind++) {
if (parsingContext & (1 << kind)) {
if (isListElement(kind, true) || isListTerminator(kind)) {
return true;
}
}
}
return false;
}
function parseList(kind, checkForStrictMode, parseElement) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var result = [];
result.pos = getNodePos();
var savedStrictModeContext = inStrictModeContext();
while (!isListTerminator(kind)) {
if (isListElement(kind, false)) {
var element = parseListElement(kind, parseElement);
result.push(element);
if (checkForStrictMode && !inStrictModeContext()) {
if (ts.isPrologueDirective(element)) {
if (isUseStrictPrologueDirective(sourceFile, element)) {
setStrictModeContext(true);
checkForStrictMode = false;
}
}
else {
checkForStrictMode = false;
}
}
continue;
}
if (abortParsingListOrMoveToNextToken(kind)) {
break;
}
}
setStrictModeContext(savedStrictModeContext);
result.end = getNodeEnd();
parsingContext = saveParsingContext;
return result;
}
function parseListElement(parsingContext, parseElement) {
var node = currentNode(parsingContext);
if (node) {
return consumeNode(node);
}
return parseElement();
}
function currentNode(parsingContext) {
if (parseErrorBeforeNextFinishedNode) {
return undefined;
}
if (!syntaxCursor) {
return undefined;
}
var node = syntaxCursor.currentNode(scanner.getStartPos());
if (ts.nodeIsMissing(node)) {
return undefined;
}
if (node.intersectsChange) {
return undefined;
}
if (ts.containsParseError(node)) {
return undefined;
}
var nodeContextFlags = node.parserContextFlags & 31;
if (nodeContextFlags !== contextFlags) {
return undefined;
}
if (!canReuseNode(node, parsingContext)) {
return undefined;
}
return node;
}
function consumeNode(node) {
scanner.setTextPos(node.end);
nextToken();
return node;
}
function canReuseNode(node, parsingContext) {
switch (parsingContext) {
case 1:
return isReusableModuleElement(node);
case 6:
return isReusableClassMember(node);
case 3:
return isReusableSwitchClause(node);
case 2:
case 4:
return isReusableStatement(node);
case 7:
return isReusableEnumMember(node);
case 5:
return isReusableTypeMember(node);
case 9:
return isReusableVariableDeclaration(node);
case 15:
return isReusableParameter(node);
case 19:
case 8:
case 16:
case 18:
case 17:
case 12:
case 13:
}
return false;
}
function isReusableModuleElement(node) {
if (node) {
switch (node.kind) {
case 200:
case 201:
case 194:
case 195:
case 198:
case 197:
return true;
}
return isReusableStatement(node);
}
return false;
}
function isReusableClassMember(node) {
if (node) {
switch (node.kind) {
case 131:
case 136:
case 130:
case 132:
case 133:
case 128:
return true;
}
}
return false;
}
function isReusableSwitchClause(node) {
if (node) {
switch (node.kind) {
case 203:
case 204:
return true;
}
}
return false;
}
function isReusableStatement(node) {
if (node) {
switch (node.kind) {
case 193:
case 173:
case 172:
case 176:
case 175:
case 188:
case 184:
case 186:
case 183:
case 182:
case 180:
case 181:
case 179:
case 178:
case 185:
case 174:
case 189:
case 187:
case 177:
case 190:
return true;
}
}
return false;
}
function isReusableEnumMember(node) {
return node.kind === 209;
}
function isReusableTypeMember(node) {
if (node) {
switch (node.kind) {
case 135:
case 129:
case 136:
case 127:
case 134:
return true;
}
}
return false;
}
function isReusableVariableDeclaration(node) {
if (node.kind !== 191) {
return false;
}
var variableDeclarator = node;
return variableDeclarator.initializer === undefined;
}
function isReusableParameter(node) {
if (node.kind !== 126) {
return false;
}
var parameter = node;
return parameter.initializer === undefined;
}
function abortParsingListOrMoveToNextToken(kind) {
parseErrorAtCurrentToken(parsingContextErrors(kind));
if (isInSomeParsingContext()) {
return true;
}
nextToken();
return false;
}
function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimeter) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var result = [];
result.pos = getNodePos();
var commaStart = -1;
while (true) {
if (isListElement(kind, false)) {
result.push(parseListElement(kind, parseElement));
commaStart = scanner.getTokenPos();
if (parseOptional(23)) {
continue;
}
commaStart = -1;
if (isListTerminator(kind)) {
break;
}
parseExpected(23);
if (considerSemicolonAsDelimeter && token === 22 && !scanner.hasPrecedingLineBreak()) {
nextToken();
}
continue;
}
if (isListTerminator(kind)) {
break;
}
if (abortParsingListOrMoveToNextToken(kind)) {
break;
}
}
if (commaStart >= 0) {
result.hasTrailingComma = true;
}
result.end = getNodeEnd();
parsingContext = saveParsingContext;
return result;
}
function createMissingList() {
var pos = getNodePos();
var result = [];
result.pos = pos;
result.end = pos;
return result;
}
function parseBracketedList(kind, parseElement, open, close) {
if (parseExpected(open)) {
var result = parseDelimitedList(kind, parseElement);
parseExpected(close);
return result;
}
return createMissingList();
}
function parseEntityName(allowReservedWords, diagnosticMessage) {
var entity = parseIdentifier(diagnosticMessage);
while (parseOptional(20)) {
var node = createNode(123, entity.pos);
node.left = entity;
node.right = parseRightSideOfDot(allowReservedWords);
entity = finishNode(node);
}
return entity;
}
function parseRightSideOfDot(allowIdentifierNames) {
if (scanner.hasPrecedingLineBreak() && scanner.isReservedWord()) {
var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
if (matchesPattern) {
return createMissingNode(64, true, ts.Diagnostics.Identifier_expected);
}
}
return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
}
function parseTemplateExpression() {
var template = createNode(167);
template.head = parseLiteralNode();
ts.Debug.assert(template.head.kind === 11, "Template head has wrong token kind");
var templateSpans = [];
templateSpans.pos = getNodePos();
do {
templateSpans.push(parseTemplateSpan());
} while (templateSpans[templateSpans.length - 1].literal.kind === 12);
templateSpans.end = getNodeEnd();
template.templateSpans = templateSpans;
return finishNode(template);
}
function parseTemplateSpan() {
var span = createNode(171);
span.expression = allowInAnd(parseExpression);
var literal;
if (token === 15) {
reScanTemplateToken();
literal = parseLiteralNode();
}
else {
literal = createMissingNode(13, false, ts.Diagnostics._0_expected, ts.tokenToString(15));
}
span.literal = literal;
return finishNode(span);
}
function parseLiteralNode(internName) {
var node = createNode(token);
var text = scanner.getTokenValue();
node.text = internName ? internIdentifier(text) : text;
if (scanner.isUnterminated()) {
node.isUnterminated = true;
}
var tokenPos = scanner.getTokenPos();
nextToken();
finishNode(node);
if (node.kind === 7 && sourceText.charCodeAt(tokenPos) === 48 && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) {
node.flags |= 8192;
}
return node;
}
function parseTypeReference() {
var node = createNode(137);
node.typeName = parseEntityName(false, ts.Diagnostics.Type_expected);
if (!scanner.hasPrecedingLineBreak() && token === 24) {
node.typeArguments = parseBracketedList(17, parseType, 24, 25);
}
return finishNode(node);
}
function parseTypeQuery() {
var node = createNode(140);
parseExpected(96);
node.exprName = parseEntityName(true);
return finishNode(node);
}
function parseTypeParameter() {
var node = createNode(125);
node.name = parseIdentifier();
if (parseOptional(78)) {
if (isStartOfType() || !isStartOfExpression()) {
node.constraint = parseType();
}
else {
node.expression = parseUnaryExpressionOrHigher();
}
}
return finishNode(node);
}
function parseTypeParameters() {
if (token === 24) {
return parseBracketedList(16, parseTypeParameter, 24, 25);
}
}
function parseParameterType() {
if (parseOptional(51)) {
return token === 8 ? parseLiteralNode(true) : parseType();
}
return undefined;
}
function isStartOfParameter() {
return token === 21 || isIdentifierOrPattern() || ts.isModifier(token);
}
function setModifiers(node, modifiers) {
if (modifiers) {
node.flags |= modifiers.flags;
node.modifiers = modifiers;
}
}
function parseParameter() {
var node = createNode(126);
setModifiers(node, parseModifiers());
node.dotDotDotToken = parseOptionalToken(21);
node.name = inGeneratorParameterContext() ? doInYieldContext(parseIdentifierOrPattern) : parseIdentifierOrPattern();
if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifier(token)) {
nextToken();
}
node.questionToken = parseOptionalToken(50);
node.type = parseParameterType();
node.initializer = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseParameterInitializer) : parseParameterInitializer();
return finishNode(node);
}
function parseParameterInitializer() {
return parseInitializer(true);
}
function fillSignature(returnToken, yieldAndGeneratorParameterContext, requireCompleteParameterList, signature) {
var returnTokenRequired = returnToken === 32;
signature.typeParameters = parseTypeParameters();
signature.parameters = parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList);
if (returnTokenRequired) {
parseExpected(returnToken);
signature.type = parseType();
}
else if (parseOptional(returnToken)) {
signature.type = parseType();
}
}
function parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList) {
if (parseExpected(16)) {
var savedYieldContext = inYieldContext();
var savedGeneratorParameterContext = inGeneratorParameterContext();
setYieldContext(yieldAndGeneratorParameterContext);
setGeneratorParameterContext(yieldAndGeneratorParameterContext);
var result = parseDelimitedList(15, parseParameter);
setYieldContext(savedYieldContext);
setGeneratorParameterContext(savedGeneratorParameterContext);
if (!parseExpected(17) && requireCompleteParameterList) {
return undefined;
}
return result;
}
return requireCompleteParameterList ? undefined : createMissingList();
}
function parseTypeMemberSemicolon() {
if (parseSemicolon()) {
return;
}
parseOptional(23);
}
function parseSignatureMember(kind) {
var node = createNode(kind);
if (kind === 135) {
parseExpected(87);
}
fillSignature(51, false, false, node);
parseTypeMemberSemicolon();
return finishNode(node);
}
function isIndexSignature() {
if (token !== 18) {
return false;
}
return lookAhead(isUnambiguouslyIndexSignature);
}
function isUnambiguouslyIndexSignature() {
nextToken();
if (token === 21 || token === 19) {
return true;
}
if (ts.isModifier(token)) {
nextToken();
if (isIdentifier()) {
return true;
}
}
else if (!isIdentifier()) {
return false;
}
else {
nextToken();
}
if (token === 51 || token === 23) {
return true;
}
if (token !== 50) {
return false;
}
nextToken();
return token === 51 || token === 23 || token === 19;
}
function parseIndexSignatureDeclaration(modifiers) {
var fullStart = modifiers ? modifiers.pos : scanner.getStartPos();
var node = createNode(136, fullStart);
setModifiers(node, modifiers);
node.parameters = parseBracketedList(15, parseParameter, 18, 19);
node.type = parseTypeAnnotation();
parseTypeMemberSemicolon();
return finishNode(node);
}
function parsePropertyOrMethodSignature() {
var fullStart = scanner.getStartPos();
var name = parsePropertyName();
var questionToken = parseOptionalToken(50);
if (token === 16 || token === 24) {
var method = createNode(129, fullStart);
method.name = name;
method.questionToken = questionToken;
fillSignature(51, false, false, method);
parseTypeMemberSemicolon();
return finishNode(method);
}
else {
var property = createNode(127, fullStart);
property.name = name;
property.questionToken = questionToken;
property.type = parseTypeAnnotation();
parseTypeMemberSemicolon();
return finishNode(property);
}
}
function isStartOfTypeMember() {
switch (token) {
case 16:
case 24:
case 18:
return true;
default:
if (ts.isModifier(token)) {
var result = lookAhead(isStartOfIndexSignatureDeclaration);
if (result) {
return result;
}
}
return isLiteralPropertyName() && lookAhead(isTypeMemberWithLiteralPropertyName);
}
}
function isStartOfIndexSignatureDeclaration() {
while (ts.isModifier(token)) {
nextToken();
}
return isIndexSignature();
}
function isTypeMemberWithLiteralPropertyName() {
nextToken();
return token === 16 ||
token === 24 ||
token === 50 ||
token === 51 ||
canParseSemicolon();
}
function parseTypeMember() {
switch (token) {
case 16:
case 24:
return parseSignatureMember(134);
case 18:
return isIndexSignature() ? parseIndexSignatureDeclaration(undefined) : parsePropertyOrMethodSignature();
case 87:
if (lookAhead(isStartOfConstructSignature)) {
return parseSignatureMember(135);
}
case 8:
case 7:
return parsePropertyOrMethodSignature();
default:
if (ts.isModifier(token)) {
var result = tryParse(parseIndexSignatureWithModifiers);
if (result) {
return result;
}
}
if (isIdentifierOrKeyword()) {
return parsePropertyOrMethodSignature();
}
}
}
function parseIndexSignatureWithModifiers() {
var modifiers = parseModifiers();
return isIndexSignature() ? parseIndexSignatureDeclaration(modifiers) : undefined;
}
function isStartOfConstructSignature() {
nextToken();
return token === 16 || token === 24;
}
function parseTypeLiteral() {
var node = createNode(141);
node.members = parseObjectTypeMembers();
return finishNode(node);
}
function parseObjectTypeMembers() {
var members;
if (parseExpected(14)) {
members = parseList(5, false, parseTypeMember);
parseExpected(15);
}
else {
members = createMissingList();
}
return members;
}
function parseTupleType() {
var node = createNode(143);
node.elementTypes = parseBracketedList(18, parseType, 18, 19);
return finishNode(node);
}
function parseParenthesizedType() {
var node = createNode(145);
parseExpected(16);
node.type = parseType();
parseExpected(17);
return finishNode(node);
}
function parseFunctionOrConstructorType(kind) {
var node = createNode(kind);
if (kind === 139) {
parseExpected(87);
}
fillSignature(32, false, false, node);
return finishNode(node);
}
function parseKeywordAndNoDot() {
var node = parseTokenNode();
return token === 20 ? undefined : node;
}
function parseNonArrayType() {
switch (token) {
case 110:
case 119:
case 117:
case 111:
case 120:
var node = tryParse(parseKeywordAndNoDot);
return node || parseTypeReference();
case 98:
return parseTokenNode();
case 96:
return parseTypeQuery();
case 14:
return parseTypeLiteral();
case 18:
return parseTupleType();
case 16:
return parseParenthesizedType();
default:
return parseTypeReference();
}
}
function isStartOfType() {
switch (token) {
case 110:
case 119:
case 117:
case 111:
case 120:
case 98:
case 96:
case 14:
case 18:
case 24:
case 87:
return true;
case 16:
return lookAhead(isStartOfParenthesizedOrFunctionType);
default:
return isIdentifier();
}
}
function isStartOfParenthesizedOrFunctionType() {
nextToken();
return token === 17 || isStartOfParameter() || isStartOfType();
}
function parseArrayTypeOrHigher() {
var type = parseNonArrayType();
while (!scanner.hasPrecedingLineBreak() && parseOptional(18)) {
parseExpected(19);
var node = createNode(142, type.pos);
node.elementType = type;
type = finishNode(node);
}
return type;
}
function parseUnionTypeOrHigher() {
var type = parseArrayTypeOrHigher();
if (token === 44) {
var types = [type];
types.pos = type.pos;
while (parseOptional(44)) {
types.push(parseArrayTypeOrHigher());
}
types.end = getNodeEnd();
var node = createNode(144, type.pos);
node.types = types;
type = finishNode(node);
}
return type;
}
function isStartOfFunctionType() {
if (token === 24) {
return true;
}
return token === 16 && lookAhead(isUnambiguouslyStartOfFunctionType);
}
function isUnambiguouslyStartOfFunctionType() {
nextToken();
if (token === 17 || token === 21) {
return true;
}
if (isIdentifier() || ts.isModifier(token)) {
nextToken();
if (token === 51 || token === 23 ||
token === 50 || token === 52 ||
isIdentifier() || ts.isModifier(token)) {
return true;
}
if (token === 17) {
nextToken();
if (token === 32) {
return true;
}
}
}
return false;
}
function parseType() {
var savedYieldContext = inYieldContext();
var savedGeneratorParameterContext = inGeneratorParameterContext();
setYieldContext(false);
setGeneratorParameterContext(false);
var result = parseTypeWorker();
setYieldContext(savedYieldContext);
setGeneratorParameterContext(savedGeneratorParameterContext);
return result;
}
function parseTypeWorker() {
if (isStartOfFunctionType()) {
return parseFunctionOrConstructorType(138);
}
if (token === 87) {
return parseFunctionOrConstructorType(139);
}
return parseUnionTypeOrHigher();
}
function parseTypeAnnotation() {
return parseOptional(51) ? parseType() : undefined;
}
function isStartOfExpression() {
switch (token) {
case 92:
case 90:
case 88:
case 94:
case 79:
case 7:
case 8:
case 10:
case 11:
case 16:
case 18:
case 14:
case 82:
case 87:
case 36:
case 56:
case 33:
case 34:
case 47:
case 46:
case 73:
case 96:
case 98:
case 38:
case 39:
case 24:
case 64:
case 109:
return true;
default:
if (isBinaryOperator()) {
return true;
}
return isIdentifier();
}
}
function isStartOfExpressionStatement() {
return token !== 14 && token !== 82 && isStartOfExpression();
}
function parseExpression() {
var expr = parseAssignmentExpressionOrHigher();
var operatorToken;
while ((operatorToken = parseOptionalToken(23))) {
expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher());
}
return expr;
}
function parseInitializer(inParameter) {
if (token !== 52) {
if (scanner.hasPrecedingLineBreak() || (inParameter && token === 14) || !isStartOfExpression()) {
return undefined;
}
}
parseExpected(52);
return parseAssignmentExpressionOrHigher();
}
function parseAssignmentExpressionOrHigher() {
if (isYieldExpression()) {
return parseYieldExpression();
}
var arrowExpression = tryParseParenthesizedArrowFunctionExpression();
if (arrowExpression) {
return arrowExpression;
}
var expr = parseBinaryExpressionOrHigher(0);
if (expr.kind === 64 && token === 32) {
return parseSimpleArrowFunctionExpression(expr);
}
if (isLeftHandSideExpression(expr) && isAssignmentOperator(reScanGreaterToken())) {
return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher());
}
return parseConditionalExpressionRest(expr);
}
function isYieldExpression() {
if (token === 109) {
if (inYieldContext()) {
return true;
}
if (inStrictModeContext()) {
return true;
}
return lookAhead(nextTokenIsIdentifierOnSameLine);
}
return false;
}
function nextTokenIsIdentifierOnSameLine() {
nextToken();
return !scanner.hasPrecedingLineBreak() && isIdentifier();
}
function parseYieldExpression() {
var node = createNode(168);
nextToken();
if (!scanner.hasPrecedingLineBreak() &&
(token === 35 || isStartOfExpression())) {
node.asteriskToken = parseOptionalToken(35);
node.expression = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
else {
return finishNode(node);
}
}
function parseSimpleArrowFunctionExpression(identifier) {
ts.Debug.assert(token === 32, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
var node = createNode(159, identifier.pos);
var parameter = createNode(126, identifier.pos);
parameter.name = identifier;
finishNode(parameter);
node.parameters = [parameter];
node.parameters.pos = parameter.pos;
node.parameters.end = parameter.end;
parseExpected(32);
node.body = parseArrowFunctionExpressionBody();
return finishNode(node);
}
function tryParseParenthesizedArrowFunctionExpression() {
var triState = isParenthesizedArrowFunctionExpression();
if (triState === 0) {
return undefined;
}
var arrowFunction = triState === 1 ? parseParenthesizedArrowFunctionExpressionHead(true) : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead);
if (!arrowFunction) {
return undefined;
}
if (parseExpected(32) || token === 14) {
arrowFunction.body = parseArrowFunctionExpressionBody();
}
else {
arrowFunction.body = parseIdentifier();
}
return finishNode(arrowFunction);
}
function isParenthesizedArrowFunctionExpression() {
if (token === 16 || token === 24) {
return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
}
if (token === 32) {
return 1;
}
return 0;
}
function isParenthesizedArrowFunctionExpressionWorker() {
var first = token;
var second = nextToken();
if (first === 16) {
if (second === 17) {
var third = nextToken();
switch (third) {
case 32:
case 51:
case 14:
return 1;
default:
return 0;
}
}
if (second === 21) {
return 1;
}
if (!isIdentifier()) {
return 0;
}
if (nextToken() === 51) {
return 1;
}
return 2;
}
else {
ts.Debug.assert(first === 24);
if (!isIdentifier()) {
return 0;
}
return 2;
}
}
function parsePossibleParenthesizedArrowFunctionExpressionHead() {
return parseParenthesizedArrowFunctionExpressionHead(false);
}
function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) {
var node = createNode(159);
fillSignature(51, false, !allowAmbiguity, node);
if (!node.parameters) {
return undefined;
}
if (!allowAmbiguity && token !== 32 && token !== 14) {
return undefined;
}
return node;
}
function parseArrowFunctionExpressionBody() {
if (token === 14) {
return parseFunctionBlock(false, false);
}
if (isStartOfStatement(true) && !isStartOfExpressionStatement() && token !== 82) {
return parseFunctionBlock(false, true);
}
return parseAssignmentExpressionOrHigher();
}
function parseConditionalExpressionRest(leftOperand) {
if (!parseOptional(50)) {
return leftOperand;
}
var node = createNode(166, leftOperand.pos);
node.condition = leftOperand;
node.whenTrue = allowInAnd(parseAssignmentExpressionOrHigher);
parseExpected(51);
node.whenFalse = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
function parseBinaryExpressionOrHigher(precedence) {
var leftOperand = parseUnaryExpressionOrHigher();
return parseBinaryExpressionRest(precedence, leftOperand);
}
function isInOrOfKeyword(t) {
return t === 85 || t === 122;
}
function parseBinaryExpressionRest(precedence, leftOperand) {
while (true) {
reScanGreaterToken();
var newPrecedence = getBinaryOperatorPrecedence();
if (newPrecedence <= precedence) {
break;
}
if (token === 85 && inDisallowInContext()) {
break;
}
leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence));
}
return leftOperand;
}
function isBinaryOperator() {
if (inDisallowInContext() && token === 85) {
return false;
}
return getBinaryOperatorPrecedence() > 0;
}
function getBinaryOperatorPrecedence() {
switch (token) {
case 49:
return 1;
case 48:
return 2;
case 44:
return 3;
case 45:
return 4;
case 43:
return 5;
case 28:
case 29:
case 30:
case 31:
return 6;
case 24:
case 25:
case 26:
case 27:
case 86:
case 85:
return 7;
case 40:
case 41:
case 42:
return 8;
case 33:
case 34:
return 9;
case 35:
case 36:
case 37:
return 10;
}
return -1;
}
function makeBinaryExpression(left, operatorToken, right) {
var node = createNode(165, left.pos);
node.left = left;
node.operatorToken = operatorToken;
node.right = right;
return finishNode(node);
}
function parsePrefixUnaryExpression() {
var node = createNode(163);
node.operator = token;
nextToken();
node.operand = parseUnaryExpressionOrHigher();
return finishNode(node);
}
function parseDeleteExpression() {
var node = createNode(160);
nextToken();
node.expression = parseUnaryExpressionOrHigher();
return finishNode(node);
}
function parseTypeOfExpression() {
var node = createNode(161);
nextToken();
node.expression = parseUnaryExpressionOrHigher();
return finishNode(node);
}
function parseVoidExpression() {
var node = createNode(162);
nextToken();
node.expression = parseUnaryExpressionOrHigher();
return finishNode(node);
}
function parseUnaryExpressionOrHigher() {
switch (token) {
case 33:
case 34:
case 47:
case 46:
case 38:
case 39:
return parsePrefixUnaryExpression();
case 73:
return parseDeleteExpression();
case 96:
return parseTypeOfExpression();
case 98:
return parseVoidExpression();
case 24:
return parseTypeAssertion();
default:
return parsePostfixExpressionOrHigher();
}
}
function parsePostfixExpressionOrHigher() {
var expression = parseLeftHandSideExpressionOrHigher();
ts.Debug.assert(isLeftHandSideExpression(expression));
if ((token === 38 || token === 39) && !scanner.hasPrecedingLineBreak()) {
var node = createNode(164, expression.pos);
node.operand = expression;
node.operator = token;
nextToken();
return finishNode(node);
}
return expression;
}
function parseLeftHandSideExpressionOrHigher() {
var expression = token === 90 ? parseSuperExpression() : parseMemberExpressionOrHigher();
return parseCallExpressionRest(expression);
}
function parseMemberExpressionOrHigher() {
var expression = parsePrimaryExpression();
return parseMemberExpressionRest(expression);
}
function parseSuperExpression() {
var expression = parseTokenNode();
if (token === 16 || token === 20) {
return expression;
}
var node = createNode(151, expression.pos);
node.expression = expression;
parseExpected(20, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
node.name = parseRightSideOfDot(true);
return finishNode(node);
}
function parseTypeAssertion() {
var node = createNode(156);
parseExpected(24);
node.type = parseType();
parseExpected(25);
node.expression = parseUnaryExpressionOrHigher();
return finishNode(node);
}
function parseMemberExpressionRest(expression) {
while (true) {
var dotOrBracketStart = scanner.getTokenPos();
if (parseOptional(20)) {
var propertyAccess = createNode(151, expression.pos);
propertyAccess.expression = expression;
propertyAccess.name = parseRightSideOfDot(true);
expression = finishNode(propertyAccess);
continue;
}
if (parseOptional(18)) {
var indexedAccess = createNode(152, expression.pos);
indexedAccess.expression = expression;
if (token !== 19) {
indexedAccess.argumentExpression = allowInAnd(parseExpression);
if (indexedAccess.argumentExpression.kind === 8 || indexedAccess.argumentExpression.kind === 7) {
var literal = indexedAccess.argumentExpression;
literal.text = internIdentifier(literal.text);
}
}
parseExpected(19);
expression = finishNode(indexedAccess);
continue;
}
if (token === 10 || token === 11) {
var tagExpression = createNode(155, expression.pos);
tagExpression.tag = expression;
tagExpression.template = token === 10 ? parseLiteralNode() : parseTemplateExpression();
expression = finishNode(tagExpression);
continue;
}
return expression;
}
}
function parseCallExpressionRest(expression) {
while (true) {
expression = parseMemberExpressionRest(expression);
if (token === 24) {
var typeArguments = tryParse(parseTypeArgumentsInExpression);
if (!typeArguments) {
return expression;
}
var callExpr = createNode(153, expression.pos);
callExpr.expression = expression;
callExpr.typeArguments = typeArguments;
callExpr.arguments = parseArgumentList();
expression = finishNode(callExpr);
continue;
}
else if (token === 16) {
var callExpr = createNode(153, expression.pos);
callExpr.expression = expression;
callExpr.arguments = parseArgumentList();
expression = finishNode(callExpr);
continue;
}
return expression;
}
}
function parseArgumentList() {
parseExpected(16);
var result = parseDelimitedList(12, parseArgumentExpression);
parseExpected(17);
return result;
}
function parseTypeArgumentsInExpression() {
if (!parseOptional(24)) {
return undefined;
}
var typeArguments = parseDelimitedList(17, parseType);
if (!parseExpected(25)) {
return undefined;
}
return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : undefined;
}
function canFollowTypeArgumentsInExpression() {
switch (token) {
case 16:
case 20:
case 17:
case 19:
case 51:
case 22:
case 23:
case 50:
case 28:
case 30:
case 29:
case 31:
case 48:
case 49:
case 45:
case 43:
case 44:
case 15:
case 1:
return true;
default:
return false;
}
}
function parsePrimaryExpression() {
switch (token) {
case 7:
case 8:
case 10:
return parseLiteralNode();
case 92:
case 90:
case 88:
case 94:
case 79:
return parseTokenNode();
case 16:
return parseParenthesizedExpression();
case 18:
return parseArrayLiteralExpression();
case 14:
return parseObjectLiteralExpression();
case 82:
return parseFunctionExpression();
case 87:
return parseNewExpression();
case 36:
case 56:
if (reScanSlashToken() === 9) {
return parseLiteralNode();
}
break;
case 11:
return parseTemplateExpression();
}
return parseIdentifier(ts.Diagnostics.Expression_expected);
}
function parseParenthesizedExpression() {
var node = createNode(157);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
return finishNode(node);
}
function parseSpreadElement() {
var node = createNode(169);
parseExpected(21);
node.expression = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
function parseArgumentOrArrayLiteralElement() {
return token === 21 ? parseSpreadElement() : token === 23 ? createNode(170) : parseAssignmentExpressionOrHigher();
}
function parseArgumentExpression() {
return allowInAnd(parseArgumentOrArrayLiteralElement);
}
function parseArrayLiteralExpression() {
var node = createNode(149);
parseExpected(18);
if (scanner.hasPrecedingLineBreak())
node.flags |= 256;
node.elements = parseDelimitedList(14, parseArgumentOrArrayLiteralElement);
parseExpected(19);
return finishNode(node);
}
function tryParseAccessorDeclaration(fullStart, modifiers) {
if (parseContextualModifier(114)) {
return parseAccessorDeclaration(132, fullStart, modifiers);
}
else if (parseContextualModifier(118)) {
return parseAccessorDeclaration(133, fullStart, modifiers);
}
return undefined;
}
function parseObjectLiteralElement() {
var fullStart = scanner.getStartPos();
var modifiers = parseModifiers();
var accessor = tryParseAccessorDeclaration(fullStart, modifiers);
if (accessor) {
return accessor;
}
var asteriskToken = parseOptionalToken(35);
var tokenIsIdentifier = isIdentifier();
var nameToken = token;
var propertyName = parsePropertyName();
var questionToken = parseOptionalToken(50);
if (asteriskToken || token === 16 || token === 24) {
return parseMethodDeclaration(fullStart, modifiers, asteriskToken, propertyName, questionToken);
}
if ((token === 23 || token === 15) && tokenIsIdentifier) {
var shorthandDeclaration = createNode(208, fullStart);
shorthandDeclaration.name = propertyName;
shorthandDeclaration.questionToken = questionToken;
return finishNode(shorthandDeclaration);
}
else {
var propertyAssignment = createNode(207, fullStart);
propertyAssignment.name = propertyName;
propertyAssignment.questionToken = questionToken;
parseExpected(51);
propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher);
return finishNode(propertyAssignment);
}
}
function parseObjectLiteralExpression() {
var node = createNode(150);
parseExpected(14);
if (scanner.hasPrecedingLineBreak()) {
node.flags |= 256;
}
node.properties = parseDelimitedList(13, parseObjectLiteralElement, true);
parseExpected(15);
return finishNode(node);
}
function parseFunctionExpression() {
var node = createNode(158);
parseExpected(82);
node.asteriskToken = parseOptionalToken(35);
node.name = node.asteriskToken ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier();
fillSignature(51, !!node.asteriskToken, false, node);
node.body = parseFunctionBlock(!!node.asteriskToken, false);
return finishNode(node);
}
function parseOptionalIdentifier() {
return isIdentifier() ? parseIdentifier() : undefined;
}
function parseNewExpression() {
var node = createNode(154);
parseExpected(87);
node.expression = parseMemberExpressionOrHigher();
node.typeArguments = tryParse(parseTypeArgumentsInExpression);
if (node.typeArguments || token === 16) {
node.arguments = parseArgumentList();
}
return finishNode(node);
}
function parseBlock(ignoreMissingOpenBrace, checkForStrictMode, diagnosticMessage) {
var node = createNode(172);
if (parseExpected(14, diagnosticMessage) || ignoreMissingOpenBrace) {
node.statements = parseList(2, checkForStrictMode, parseStatement);
parseExpected(15);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseFunctionBlock(allowYield, ignoreMissingOpenBrace, diagnosticMessage) {
var savedYieldContext = inYieldContext();
setYieldContext(allowYield);
var block = parseBlock(ignoreMissingOpenBrace, true, diagnosticMessage);
setYieldContext(savedYieldContext);
return block;
}
function parseEmptyStatement() {
var node = createNode(174);
parseExpected(22);
return finishNode(node);
}
function parseIfStatement() {
var node = createNode(176);
parseExpected(83);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
node.thenStatement = parseStatement();
node.elseStatement = parseOptional(75) ? parseStatement() : undefined;
return finishNode(node);
}
function parseDoStatement() {
var node = createNode(177);
parseExpected(74);
node.statement = parseStatement();
parseExpected(99);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
parseOptional(22);
return finishNode(node);
}
function parseWhileStatement() {
var node = createNode(178);
parseExpected(99);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
node.statement = parseStatement();
return finishNode(node);
}
function parseForOrForInOrForOfStatement() {
var pos = getNodePos();
parseExpected(81);
parseExpected(16);
var initializer = undefined;
if (token !== 22) {
if (token === 97 || token === 103 || token === 69) {
initializer = parseVariableDeclarationList(true);
}
else {
initializer = disallowInAnd(parseExpression);
}
}
var forOrForInOrForOfStatement;
if (parseOptional(85)) {
var forInStatement = createNode(180, pos);
forInStatement.initializer = initializer;
forInStatement.expression = allowInAnd(parseExpression);
parseExpected(17);
forOrForInOrForOfStatement = forInStatement;
}
else if (parseOptional(122)) {
var forOfStatement = createNode(181, pos);
forOfStatement.initializer = initializer;
forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher);
parseExpected(17);
forOrForInOrForOfStatement = forOfStatement;
}
else {
var forStatement = createNode(179, pos);
forStatement.initializer = initializer;
parseExpected(22);
if (token !== 22 && token !== 17) {
forStatement.condition = allowInAnd(parseExpression);
}
parseExpected(22);
if (token !== 17) {
forStatement.iterator = allowInAnd(parseExpression);
}
parseExpected(17);
forOrForInOrForOfStatement = forStatement;
}
forOrForInOrForOfStatement.statement = parseStatement();
return finishNode(forOrForInOrForOfStatement);
}
function parseBreakOrContinueStatement(kind) {
var node = createNode(kind);
parseExpected(kind === 183 ? 65 : 70);
if (!canParseSemicolon()) {
node.label = parseIdentifier();
}
parseSemicolon();
return finishNode(node);
}
function parseReturnStatement() {
var node = createNode(184);
parseExpected(89);
if (!canParseSemicolon()) {
node.expression = allowInAnd(parseExpression);
}
parseSemicolon();
return finishNode(node);
}
function parseWithStatement() {
var node = createNode(185);
parseExpected(100);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
node.statement = parseStatement();
return finishNode(node);
}
function parseCaseClause() {
var node = createNode(203);
parseExpected(66);
node.expression = allowInAnd(parseExpression);
parseExpected(51);
node.statements = parseList(4, false, parseStatement);
return finishNode(node);
}
function parseDefaultClause() {
var node = createNode(204);
parseExpected(72);
parseExpected(51);
node.statements = parseList(4, false, parseStatement);
return finishNode(node);
}
function parseCaseOrDefaultClause() {
return token === 66 ? parseCaseClause() : parseDefaultClause();
}
function parseSwitchStatement() {
var node = createNode(186);
parseExpected(91);
parseExpected(16);
node.expression = allowInAnd(parseExpression);
parseExpected(17);
parseExpected(14);
node.clauses = parseList(3, false, parseCaseOrDefaultClause);
parseExpected(15);
return finishNode(node);
}
function parseThrowStatement() {
var node = createNode(188);
parseExpected(93);
node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
parseSemicolon();
return finishNode(node);
}
function parseTryStatement() {
var node = createNode(189);
parseExpected(95);
node.tryBlock = parseBlock(false, false);
node.catchClause = token === 67 ? parseCatchClause() : undefined;
if (!node.catchClause || token === 80) {
parseExpected(80);
node.finallyBlock = parseBlock(false, false);
}
return finishNode(node);
}
function parseCatchClause() {
var result = createNode(206);
parseExpected(67);
parseExpected(16);
result.name = parseIdentifier();
result.type = parseTypeAnnotation();
parseExpected(17);
result.block = parseBlock(false, false);
return finishNode(result);
}
function parseDebuggerStatement() {
var node = createNode(190);
parseExpected(71);
parseSemicolon();
return finishNode(node);
}
function parseExpressionOrLabeledStatement() {
var fullStart = scanner.getStartPos();
var expression = allowInAnd(parseExpression);
if (expression.kind === 64 && parseOptional(51)) {
var labeledStatement = createNode(187, fullStart);
labeledStatement.label = expression;
labeledStatement.statement = parseStatement();
return finishNode(labeledStatement);
}
else {
var expressionStatement = createNode(175, fullStart);
expressionStatement.expression = expression;
parseSemicolon();
return finishNode(expressionStatement);
}
}
function isStartOfStatement(inErrorRecovery) {
if (ts.isModifier(token)) {
var result = lookAhead(parseVariableStatementOrFunctionDeclarationWithModifiers);
if (result) {
return true;
}
}
switch (token) {
case 22:
return !inErrorRecovery;
case 14:
case 97:
case 103:
case 82:
case 83:
case 74:
case 99:
case 81:
case 70:
case 65:
case 89:
case 100:
case 91:
case 93:
case 95:
case 71:
case 67:
case 80:
return true;
case 69:
var isConstEnum = lookAhead(nextTokenIsEnumKeyword);
return !isConstEnum;
case 102:
case 68:
case 115:
case 76:
case 121:
if (isDeclarationStart()) {
return false;
}
case 107:
case 105:
case 106:
case 108:
if (lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine)) {
return false;
}
default:
return isStartOfExpression();
}
}
function nextTokenIsEnumKeyword() {
nextToken();
return token === 76;
}
function nextTokenIsIdentifierOrKeywordOnSameLine() {
nextToken();
return isIdentifierOrKeyword() && !scanner.hasPrecedingLineBreak();
}
function parseStatement() {
switch (token) {
case 14:
return parseBlock(false, false);
case 97:
case 69:
return parseVariableStatement(scanner.getStartPos(), undefined);
case 82:
return parseFunctionDeclaration(scanner.getStartPos(), undefined);
case 22:
return parseEmptyStatement();
case 83:
return parseIfStatement();
case 74:
return parseDoStatement();
case 99:
return parseWhileStatement();
case 81:
return parseForOrForInOrForOfStatement();
case 70:
return parseBreakOrContinueStatement(182);
case 65:
return parseBreakOrContinueStatement(183);
case 89:
return parseReturnStatement();
case 100:
return parseWithStatement();
case 91:
return parseSwitchStatement();
case 93:
return parseThrowStatement();
case 95:
case 67:
case 80:
return parseTryStatement();
case 71:
return parseDebuggerStatement();
case 103:
if (isLetDeclaration()) {
return parseVariableStatement(scanner.getStartPos(), undefined);
}
default:
if (ts.isModifier(token)) {
var result = tryParse(parseVariableStatementOrFunctionDeclarationWithModifiers);
if (result) {
return result;
}
}
return parseExpressionOrLabeledStatement();
}
}
function parseVariableStatementOrFunctionDeclarationWithModifiers() {
var start = scanner.getStartPos();
var modifiers = parseModifiers();
switch (token) {
case 69:
var nextTokenIsEnum = lookAhead(nextTokenIsEnumKeyword);
if (nextTokenIsEnum) {
return undefined;
}
return parseVariableStatement(start, modifiers);
case 103:
if (!isLetDeclaration()) {
return undefined;
}
return parseVariableStatement(start, modifiers);
case 97:
return parseVariableStatement(start, modifiers);
case 82:
return parseFunctionDeclaration(start, modifiers);
}
return undefined;
}
function parseFunctionBlockOrSemicolon(isGenerator, diagnosticMessage) {
if (token !== 14 && canParseSemicolon()) {
parseSemicolon();
return;
}
return parseFunctionBlock(isGenerator, false, diagnosticMessage);
}
function parseArrayBindingElement() {
if (token === 23) {
return createNode(170);
}
var node = createNode(148);
node.dotDotDotToken = parseOptionalToken(21);
node.name = parseIdentifierOrPattern();
node.initializer = parseInitializer(false);
return finishNode(node);
}
function parseObjectBindingElement() {
var node = createNode(148);
var id = parsePropertyName();
if (id.kind === 64 && token !== 51) {
node.name = id;
}
else {
parseExpected(51);
node.propertyName = id;
node.name = parseIdentifierOrPattern();
}
node.initializer = parseInitializer(false);
return finishNode(node);
}
function parseObjectBindingPattern() {
var node = createNode(146);
parseExpected(14);
node.elements = parseDelimitedList(10, parseObjectBindingElement);
parseExpected(15);
return finishNode(node);
}
function parseArrayBindingPattern() {
var node = createNode(147);
parseExpected(18);
node.elements = parseDelimitedList(11, parseArrayBindingElement);
parseExpected(19);
return finishNode(node);
}
function isIdentifierOrPattern() {
return token === 14 || token === 18 || isIdentifier();
}
function parseIdentifierOrPattern() {
if (token === 18) {
return parseArrayBindingPattern();
}
if (token === 14) {
return parseObjectBindingPattern();
}
return parseIdentifier();
}
function parseVariableDeclaration() {
var node = createNode(191);
node.name = parseIdentifierOrPattern();
node.type = parseTypeAnnotation();
if (!isInOrOfKeyword(token)) {
node.initializer = parseInitializer(false);
}
return finishNode(node);
}
function parseVariableDeclarationList(inForStatementInitializer) {
var node = createNode(192);
switch (token) {
case 97:
break;
case 103:
node.flags |= 2048;
break;
case 69:
node.flags |= 4096;
break;
default:
ts.Debug.fail();
}
nextToken();
if (token === 122 && lookAhead(canFollowContextualOfKeyword)) {
node.declarations = createMissingList();
}
else {
var savedDisallowIn = inDisallowInContext();
setDisallowInContext(inForStatementInitializer);
node.declarations = parseDelimitedList(9, parseVariableDeclaration);
setDisallowInContext(savedDisallowIn);
}
return finishNode(node);
}
function canFollowContextualOfKeyword() {
return nextTokenIsIdentifier() && nextToken() === 17;
}
function parseVariableStatement(fullStart, modifiers) {
var node = createNode(173, fullStart);
setModifiers(node, modifiers);
node.declarationList = parseVariableDeclarationList(false);
parseSemicolon();
return finishNode(node);
}
function parseFunctionDeclaration(fullStart, modifiers) {
var node = createNode(193, fullStart);
setModifiers(node, modifiers);
parseExpected(82);
node.asteriskToken = parseOptionalToken(35);
node.name = parseIdentifier();
fillSignature(51, !!node.asteriskToken, false, node);
node.body = parseFunctionBlockOrSemicolon(!!node.asteriskToken, ts.Diagnostics.or_expected);
return finishNode(node);
}
function parseConstructorDeclaration(pos, modifiers) {
var node = createNode(131, pos);
setModifiers(node, modifiers);
parseExpected(112);
fillSignature(51, false, false, node);
node.body = parseFunctionBlockOrSemicolon(false, ts.Diagnostics.or_expected);
return finishNode(node);
}
function parseMethodDeclaration(fullStart, modifiers, asteriskToken, name, questionToken, diagnosticMessage) {
var method = createNode(130, fullStart);
setModifiers(method, modifiers);
method.asteriskToken = asteriskToken;
method.name = name;
method.questionToken = questionToken;
fillSignature(51, !!asteriskToken, false, method);
method.body = parseFunctionBlockOrSemicolon(!!asteriskToken, diagnosticMessage);
return finishNode(method);
}
function parsePropertyOrMethodDeclaration(fullStart, modifiers) {
var asteriskToken = parseOptionalToken(35);
var name = parsePropertyName();
var questionToken = parseOptionalToken(50);
if (asteriskToken || token === 16 || token === 24) {
return parseMethodDeclaration(fullStart, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected);
}
else {
var property = createNode(128, fullStart);
setModifiers(property, modifiers);
property.name = name;
property.questionToken = questionToken;
property.type = parseTypeAnnotation();
property.initializer = allowInAnd(parseNonParameterInitializer);
parseSemicolon();
return finishNode(property);
}
}
function parseNonParameterInitializer() {
return parseInitializer(false);
}
function parseAccessorDeclaration(kind, fullStart, modifiers) {
var node = createNode(kind, fullStart);
setModifiers(node, modifiers);
node.name = parsePropertyName();
fillSignature(51, false, false, node);
node.body = parseFunctionBlockOrSemicolon(false);
return finishNode(node);
}
function isClassMemberStart() {
var idToken;
while (ts.isModifier(token)) {
idToken = token;
nextToken();
}
if (token === 35) {
return true;
}
if (isLiteralPropertyName()) {
idToken = token;
nextToken();
}
if (token === 18) {
return true;
}
if (idToken !== undefined) {
if (!ts.isKeyword(idToken) || idToken === 118 || idToken === 114) {
return true;
}
switch (token) {
case 16:
case 24:
case 51:
case 52:
case 50:
return true;
default:
return canParseSemicolon();
}
}
return false;
}
function parseModifiers() {
var flags = 0;
var modifiers;
while (true) {
var modifierStart = scanner.getStartPos();
var modifierKind = token;
if (!parseAnyContextualModifier()) {
break;
}
if (!modifiers) {
modifiers = [];
modifiers.pos = modifierStart;
}
flags |= modifierToFlag(modifierKind);
modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
}
if (modifiers) {
modifiers.flags = flags;
modifiers.end = scanner.getStartPos();
}
return modifiers;
}
function parseClassElement() {
var fullStart = getNodePos();
var modifiers = parseModifiers();
var accessor = tryParseAccessorDeclaration(fullStart, modifiers);
if (accessor) {
return accessor;
}
if (token === 112) {
return parseConstructorDeclaration(fullStart, modifiers);
}
if (isIndexSignature()) {
return parseIndexSignatureDeclaration(modifiers);
}
if (isIdentifierOrKeyword() ||
token === 8 ||
token === 7 ||
token === 35 ||
token === 18) {
return parsePropertyOrMethodDeclaration(fullStart, modifiers);
}
ts.Debug.fail("Should not have attempted to parse class member declaration.");
}
function parseClassDeclaration(fullStart, modifiers) {
var node = createNode(194, fullStart);
setModifiers(node, modifiers);
parseExpected(68);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
node.heritageClauses = parseHeritageClauses(true);
if (parseExpected(14)) {
node.members = inGeneratorParameterContext() ? doOutsideOfYieldContext(parseClassMembers) : parseClassMembers();
parseExpected(15);
}
else {
node.members = createMissingList();
}
return finishNode(node);
}
function parseHeritageClauses(isClassHeritageClause) {
if (isHeritageClause()) {
return isClassHeritageClause && inGeneratorParameterContext() ? doOutsideOfYieldContext(parseHeritageClausesWorker) : parseHeritageClausesWorker();
}
return undefined;
}
function parseHeritageClausesWorker() {
return parseList(19, false, parseHeritageClause);
}
function parseHeritageClause() {
if (token === 78 || token === 101) {
var node = createNode(205);
node.token = token;
nextToken();
node.types = parseDelimitedList(8, parseTypeReference);
return finishNode(node);
}
return undefined;
}
function isHeritageClause() {
return token === 78 || token === 101;
}
function parseClassMembers() {
return parseList(6, false, parseClassElement);
}
function parseInterfaceDeclaration(fullStart, modifiers) {
var node = createNode(195, fullStart);
setModifiers(node, modifiers);
parseExpected(102);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
node.heritageClauses = parseHeritageClauses(false);
node.members = parseObjectTypeMembers();
return finishNode(node);
}
function parseTypeAliasDeclaration(fullStart, modifiers) {
var node = createNode(196, fullStart);
setModifiers(node, modifiers);
parseExpected(121);
node.name = parseIdentifier();
parseExpected(52);
node.type = parseType();
parseSemicolon();
return finishNode(node);
}
function parseEnumMember() {
var node = createNode(209, scanner.getStartPos());
node.name = parsePropertyName();
node.initializer = allowInAnd(parseNonParameterInitializer);
return finishNode(node);
}
function parseEnumDeclaration(fullStart, modifiers) {
var node = createNode(197, fullStart);
setModifiers(node, modifiers);
parseExpected(76);
node.name = parseIdentifier();
if (parseExpected(14)) {
node.members = parseDelimitedList(7, parseEnumMember);
parseExpected(15);
}
else {
node.members = createMissingList();
}
return finishNode(node);
}
function parseModuleBlock() {
var node = createNode(199, scanner.getStartPos());
if (parseExpected(14)) {
node.statements = parseList(1, false, parseModuleElement);
parseExpected(15);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseInternalModuleTail(fullStart, modifiers, flags) {
var node = createNode(198, fullStart);
setModifiers(node, modifiers);
node.flags |= flags;
node.name = parseIdentifier();
node.body = parseOptional(20) ? parseInternalModuleTail(getNodePos(), undefined, 1) : parseModuleBlock();
return finishNode(node);
}
function parseAmbientExternalModuleDeclaration(fullStart, modifiers) {
var node = createNode(198, fullStart);
setModifiers(node, modifiers);
node.name = parseLiteralNode(true);
node.body = parseModuleBlock();
return finishNode(node);
}
function parseModuleDeclaration(fullStart, modifiers) {
parseExpected(115);
return token === 8 ? parseAmbientExternalModuleDeclaration(fullStart, modifiers) : parseInternalModuleTail(fullStart, modifiers, modifiers ? modifiers.flags : 0);
}
function isExternalModuleReference() {
return token === 116 &&
lookAhead(nextTokenIsOpenParen);
}
function nextTokenIsOpenParen() {
return nextToken() === 16;
}
function parseImportDeclaration(fullStart, modifiers) {
var node = createNode(200, fullStart);
setModifiers(node, modifiers);
parseExpected(84);
node.name = parseIdentifier();
parseExpected(52);
node.moduleReference = parseModuleReference();
parseSemicolon();
return finishNode(node);
}
function parseModuleReference() {
return isExternalModuleReference() ? parseExternalModuleReference() : parseEntityName(false);
}
function parseExternalModuleReference() {
var node = createNode(202);
parseExpected(116);
parseExpected(16);
node.expression = parseExpression();
if (node.expression.kind === 8) {
internIdentifier(node.expression.text);
}
parseExpected(17);
return finishNode(node);
}
function parseExportAssignmentTail(fullStart, modifiers) {
var node = createNode(201, fullStart);
setModifiers(node, modifiers);
node.exportName = parseIdentifier();
parseSemicolon();
return finishNode(node);
}
function isLetDeclaration() {
return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOnSameLine);
}
function isDeclarationStart() {
switch (token) {
case 97:
case 69:
case 82:
return true;
case 103:
return isLetDeclaration();
case 68:
case 102:
case 76:
case 84:
case 121:
return lookAhead(nextTokenIsIdentifierOrKeyword);
case 115:
return lookAhead(nextTokenIsIdentifierOrKeywordOrStringLiteral);
case 77:
return lookAhead(nextTokenIsEqualsTokenOrDeclarationStart);
case 113:
case 107:
case 105:
case 106:
case 108:
return lookAhead(nextTokenIsDeclarationStart);
}
}
function isIdentifierOrKeyword() {
return token >= 64;
}
function nextTokenIsIdentifierOrKeyword() {
nextToken();
return isIdentifierOrKeyword();
}
function nextTokenIsIdentifierOrKeywordOrStringLiteral() {
nextToken();
return isIdentifierOrKeyword() || token === 8;
}
function nextTokenIsEqualsTokenOrDeclarationStart() {
nextToken();
return token === 52 || isDeclarationStart();
}
function nextTokenIsDeclarationStart() {
nextToken();
return isDeclarationStart();
}
function parseDeclaration() {
var fullStart = getNodePos();
var modifiers = parseModifiers();
if (token === 77) {
nextToken();
if (parseOptional(52)) {
return parseExportAssignmentTail(fullStart, modifiers);
}
}
switch (token) {
case 97:
case 103:
case 69:
return parseVariableStatement(fullStart, modifiers);
case 82:
return parseFunctionDeclaration(fullStart, modifiers);
case 68:
return parseClassDeclaration(fullStart, modifiers);
case 102:
return parseInterfaceDeclaration(fullStart, modifiers);
case 121:
return parseTypeAliasDeclaration(fullStart, modifiers);
case 76:
return parseEnumDeclaration(fullStart, modifiers);
case 115:
return parseModuleDeclaration(fullStart, modifiers);
case 84:
return parseImportDeclaration(fullStart, modifiers);
default:
ts.Debug.fail("Mismatch between isDeclarationStart and parseDeclaration");
}
}
function isSourceElement(inErrorRecovery) {
return isDeclarationStart() || isStartOfStatement(inErrorRecovery);
}
function parseSourceElement() {
return parseSourceElementOrModuleElement();
}
function parseModuleElement() {
return parseSourceElementOrModuleElement();
}
function parseSourceElementOrModuleElement() {
return isDeclarationStart() ? parseDeclaration() : parseStatement();
}
function processReferenceComments(sourceFile) {
var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, sourceText);
var referencedFiles = [];
var amdDependencies = [];
var amdModuleName;
while (true) {
var kind = triviaScanner.scan();
if (kind === 5 || kind === 4 || kind === 3) {
continue;
}
if (kind !== 2) {
break;
}
var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos() };
var comment = sourceText.substring(range.pos, range.end);
var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, range);
if (referencePathMatchResult) {
var fileReference = referencePathMatchResult.fileReference;
sourceFile.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
var diagnosticMessage = referencePathMatchResult.diagnosticMessage;
if (fileReference) {
referencedFiles.push(fileReference);
}
if (diagnosticMessage) {
sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage));
}
}
else {
var amdModuleNameRegEx = /^\/\/\/\s*<amd-module\s+name\s*=\s*('|")(.+?)\1/gim;
var amdModuleNameMatchResult = amdModuleNameRegEx.exec(comment);
if (amdModuleNameMatchResult) {
if (amdModuleName) {
sourceFile.parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ts.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments));
}
amdModuleName = amdModuleNameMatchResult[2];
}
var amdDependencyRegEx = /^\/\/\/\s*<amd-dependency\s/gim;
var pathRegex = /\spath\s*=\s*('|")(.+?)\1/gim;
var nameRegex = /\sname\s*=\s*('|")(.+?)\1/gim;
var amdDependencyMatchResult = amdDependencyRegEx.exec(comment);
if (amdDependencyMatchResult) {
var pathMatchResult = pathRegex.exec(comment);
var nameMatchResult = nameRegex.exec(comment);
if (pathMatchResult) {
var amdDependency = { path: pathMatchResult[2], name: nameMatchResult ? nameMatchResult[2] : undefined };
amdDependencies.push(amdDependency);
}
}
}
}
sourceFile.referencedFiles = referencedFiles;
sourceFile.amdDependencies = amdDependencies;
sourceFile.amdModuleName = amdModuleName;
}
function setExternalModuleIndicator(sourceFile) {
sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 || node.kind === 200 && node.moduleReference.kind === 202 || node.kind === 201 ? node : undefined; });
}
}
function isLeftHandSideExpression(expr) {
if (expr) {
switch (expr.kind) {
case 151:
case 152:
case 154:
case 153:
case 155:
case 149:
case 157:
case 150:
case 158:
case 64:
case 9:
case 7:
case 8:
case 10:
case 167:
case 79:
case 88:
case 92:
case 94:
case 90:
return true;
}
}
return false;
}
ts.isLeftHandSideExpression = isLeftHandSideExpression;
function isAssignmentOperator(token) {
return token >= 52 && token <= 63;
}
ts.isAssignmentOperator = isAssignmentOperator;
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.bindTime = 0;
(function (ModuleInstanceState) {
ModuleInstanceState[ModuleInstanceState["NonInstantiated"] = 0] = "NonInstantiated";
ModuleInstanceState[ModuleInstanceState["Instantiated"] = 1] = "Instantiated";
ModuleInstanceState[ModuleInstanceState["ConstEnumOnly"] = 2] = "ConstEnumOnly";
})(ts.ModuleInstanceState || (ts.ModuleInstanceState = {}));
var ModuleInstanceState = ts.ModuleInstanceState;
function getModuleInstanceState(node) {
if (node.kind === 195 || node.kind === 196) {
return 0;
}
else if (ts.isConstEnumDeclaration(node)) {
return 2;
}
else if (node.kind === 200 && !(node.flags & 1)) {
return 0;
}
else if (node.kind === 199) {
var state = 0;
ts.forEachChild(node, function (n) {
switch (getModuleInstanceState(n)) {
case 0:
return false;
case 2:
state = 2;
return false;
case 1:
state = 1;
return true;
}
});
return state;
}
else if (node.kind === 198) {
return getModuleInstanceState(node.body);
}
else {
return 1;
}
}
ts.getModuleInstanceState = getModuleInstanceState;
function bindSourceFile(file) {
var start = new Date().getTime();
bindSourceFileWorker(file);
ts.bindTime += new Date().getTime() - start;
}
ts.bindSourceFile = bindSourceFile;
function bindSourceFileWorker(file) {
var parent;
var container;
var blockScopeContainer;
var lastContainer;
var symbolCount = 0;
var Symbol = ts.objectAllocator.getSymbolConstructor();
if (!file.locals) {
file.locals = {};
container = blockScopeContainer = file;
bind(file);
file.symbolCount = symbolCount;
}
function createSymbol(flags, name) {
symbolCount++;
return new Symbol(flags, name);
}
function addDeclarationToSymbol(symbol, node, symbolKind) {
symbol.flags |= symbolKind;
if (!symbol.declarations)
symbol.declarations = [];
symbol.declarations.push(node);
if (symbolKind & 1952 && !symbol.exports)
symbol.exports = {};
if (symbolKind & 6240 && !symbol.members)
symbol.members = {};
node.symbol = symbol;
if (symbolKind & 107455 && !symbol.valueDeclaration)
symbol.valueDeclaration = node;
}
function getDeclarationName(node) {
if (node.name) {
if (node.kind === 198 && node.name.kind === 8) {
return '"' + node.name.text + '"';
}
if (node.name.kind === 124) {
var nameExpression = node.name.expression;
ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression));
return ts.getPropertyNameForKnownSymbolName(nameExpression.name.text);
}
return node.name.text;
}
switch (node.kind) {
case 139:
case 131:
return "__constructor";
case 138:
case 134:
return "__call";
case 135:
return "__new";
case 136:
return "__index";
}
}
function getDisplayName(node) {
return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node);
}
function declareSymbol(symbols, parent, node, includes, excludes) {
ts.Debug.assert(!ts.hasDynamicName(node));
var name = getDeclarationName(node);
if (name !== undefined) {
var symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name));
if (symbol.flags & excludes) {
if (node.name) {
node.name.parent = node;
}
var message = symbol.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
ts.forEach(symbol.declarations, function (declaration) {
file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name, message, getDisplayName(declaration)));
});
file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name, message, getDisplayName(node)));
symbol = createSymbol(0, name);
}
}
else {
symbol = createSymbol(0, "__missing");
}
addDeclarationToSymbol(symbol, node, includes);
symbol.parent = parent;
if (node.kind === 194 && symbol.exports) {
var prototypeSymbol = createSymbol(4 | 134217728, "prototype");
if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) {
if (node.name) {
node.name.parent = node;
}
file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name));
}
symbol.exports[prototypeSymbol.name] = prototypeSymbol;
prototypeSymbol.parent = symbol;
}
return symbol;
}
function isAmbientContext(node) {
while (node) {
if (node.flags & 2)
return true;
node = node.parent;
}
return false;
}
function declareModuleMember(node, symbolKind, symbolExcludes) {
var exportKind = 0;
if (symbolKind & 107455) {
exportKind |= 1048576;
}
if (symbolKind & 793056) {
exportKind |= 2097152;
}
if (symbolKind & 1536) {
exportKind |= 4194304;
}
if (ts.getCombinedNodeFlags(node) & 1 || (node.kind !== 200 && isAmbientContext(container))) {
if (exportKind) {
var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
node.localSymbol = local;
}
else {
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
}
}
else {
declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
}
}
function bindChildren(node, symbolKind, isBlockScopeContainer) {
if (symbolKind & 255504) {
node.locals = {};
}
var saveParent = parent;
var saveContainer = container;
var savedBlockScopeContainer = blockScopeContainer;
parent = node;
if (symbolKind & 262128) {
container = node;
if (lastContainer) {
lastContainer.nextContainer = container;
}
lastContainer = container;
}
if (isBlockScopeContainer) {
blockScopeContainer = node;
}
ts.forEachChild(node, bind);
container = saveContainer;
parent = saveParent;
blockScopeContainer = savedBlockScopeContainer;
}
function bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
switch (container.kind) {
case 198:
declareModuleMember(node, symbolKind, symbolExcludes);
break;
case 210:
if (ts.isExternalModule(container)) {
declareModuleMember(node, symbolKind, symbolExcludes);
break;
}
case 138:
case 139:
case 134:
case 135:
case 136:
case 130:
case 129:
case 131:
case 132:
case 133:
case 193:
case 158:
case 159:
declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes);
break;
case 194:
if (node.flags & 128) {
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
break;
}
case 141:
case 150:
case 195:
declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes);
break;
case 197:
declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes);
break;
}
bindChildren(node, symbolKind, isBlockScopeContainer);
}
function bindModuleDeclaration(node) {
if (node.name.kind === 8) {
bindDeclaration(node, 512, 106639, true);
}
else {
var state = getModuleInstanceState(node);
if (state === 0) {
bindDeclaration(node, 1024, 0, true);
}
else {
bindDeclaration(node, 512, 106639, true);
if (state === 2) {
node.symbol.constEnumOnlyModule = true;
}
else if (node.symbol.constEnumOnlyModule) {
node.symbol.constEnumOnlyModule = false;
}
}
}
}
function bindFunctionOrConstructorType(node) {
var symbol = createSymbol(131072, getDeclarationName(node));
addDeclarationToSymbol(symbol, node, 131072);
bindChildren(node, 131072, false);
var typeLiteralSymbol = createSymbol(2048, "__type");
addDeclarationToSymbol(typeLiteralSymbol, node, 2048);
typeLiteralSymbol.members = {};
typeLiteralSymbol.members[node.kind === 138 ? "__call" : "__new"] = symbol;
}
function bindAnonymousDeclaration(node, symbolKind, name, isBlockScopeContainer) {
var symbol = createSymbol(symbolKind, name);
addDeclarationToSymbol(symbol, node, symbolKind);
bindChildren(node, symbolKind, isBlockScopeContainer);
}
function bindCatchVariableDeclaration(node) {
var symbol = createSymbol(1, node.name.text || "__missing");
addDeclarationToSymbol(symbol, node, 1);
var saveParent = parent;
var savedBlockScopeContainer = blockScopeContainer;
parent = blockScopeContainer = node;
ts.forEachChild(node, bind);
parent = saveParent;
blockScopeContainer = savedBlockScopeContainer;
}
function bindBlockScopedVariableDeclaration(node) {
switch (blockScopeContainer.kind) {
case 198:
declareModuleMember(node, 2, 107455);
break;
case 210:
if (ts.isExternalModule(container)) {
declareModuleMember(node, 2, 107455);
break;
}
default:
if (!blockScopeContainer.locals) {
blockScopeContainer.locals = {};
}
declareSymbol(blockScopeContainer.locals, undefined, node, 2, 107455);
}
bindChildren(node, 2, false);
}
function getDestructuringParameterName(node) {
return "__" + ts.indexOf(node.parent.parameters, node);
}
function bind(node) {
node.parent = parent;
switch (node.kind) {
case 125:
bindDeclaration(node, 262144, 530912, false);
break;
case 126:
bindParameter(node);
break;
case 191:
case 148:
if (ts.isBindingPattern(node.name)) {
bindChildren(node, 0, false);
}
else if (ts.getCombinedNodeFlags(node) & 6144) {
bindBlockScopedVariableDeclaration(node);
}
else {
bindDeclaration(node, 1, 107454, false);
}
break;
case 128:
case 127:
bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455, false);
break;
case 207:
case 208:
bindPropertyOrMethodOrAccessor(node, 4, 107455, false);
break;
case 209:
bindPropertyOrMethodOrAccessor(node, 8, 107455, false);
break;
case 134:
case 135:
case 136:
bindDeclaration(node, 131072, 0, false);
break;
case 130:
case 129:
bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263, true);
break;
case 193:
bindDeclaration(node, 16, 106927, true);
break;
case 131:
bindDeclaration(node, 16384, 0, true);
break;
case 132:
bindPropertyOrMethodOrAccessor(node, 32768, 41919, true);
break;
case 133:
bindPropertyOrMethodOrAccessor(node, 65536, 74687, true);
break;
case 138:
case 139:
bindFunctionOrConstructorType(node);
break;
case 141:
bindAnonymousDeclaration(node, 2048, "__type", false);
break;
case 150:
bindAnonymousDeclaration(node, 4096, "__object", false);
break;
case 158:
case 159:
bindAnonymousDeclaration(node, 16, "__function", true);
break;
case 206:
bindCatchVariableDeclaration(node);
break;
case 194:
bindDeclaration(node, 32, 899583, false);
break;
case 195:
bindDeclaration(node, 64, 792992, false);
break;
case 196:
bindDeclaration(node, 524288, 793056, false);
break;
case 197:
if (ts.isConst(node)) {
bindDeclaration(node, 128, 899967, false);
}
else {
bindDeclaration(node, 256, 899327, false);
}
break;
case 198:
bindModuleDeclaration(node);
break;
case 200:
bindDeclaration(node, 8388608, 8388608, false);
break;
case 210:
if (ts.isExternalModule(node)) {
bindAnonymousDeclaration(node, 512, '"' + ts.removeFileExtension(node.fileName) + '"', true);
break;
}
case 172:
bindChildren(node, 0, !ts.isAnyFunction(node.parent));
break;
case 206:
case 179:
case 180:
case 181:
case 186:
bindChildren(node, 0, true);
break;
default:
var saveParent = parent;
parent = node;
ts.forEachChild(node, bind);
parent = saveParent;
}
}
function bindParameter(node) {
if (ts.isBindingPattern(node.name)) {
bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node), false);
}
else {
bindDeclaration(node, 1, 107455, false);
}
if (node.flags & 112 &&
node.parent.kind === 131 &&
node.parent.parent.kind === 194) {
var classDeclaration = node.parent.parent;
declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455);
}
}
function bindPropertyOrMethodOrAccessor(node, symbolKind, symbolExcludes, isBlockScopeContainer) {
if (ts.hasDynamicName(node)) {
bindAnonymousDeclaration(node, symbolKind, "__computed", isBlockScopeContainer);
}
else {
bindDeclaration(node, symbolKind, symbolExcludes, isBlockScopeContainer);
}
}
}
})(ts || (ts = {}));
var ts;
(function (ts) {
var nextSymbolId = 1;
var nextNodeId = 1;
var nextMergeId = 1;
ts.checkTime = 0;
function createTypeChecker(host, produceDiagnostics) {
var Symbol = ts.objectAllocator.getSymbolConstructor();
var Type = ts.objectAllocator.getTypeConstructor();
var Signature = ts.objectAllocator.getSignatureConstructor();
var typeCount = 0;
var emptyArray = [];
var emptySymbols = {};
var compilerOptions = host.getCompilerOptions();
var languageVersion = compilerOptions.target || 0;
var emitResolver = createResolver();
var checker = {
getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); },
getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); },
getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount"); },
getTypeCount: function () { return typeCount; },
isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
getDiagnostics: getDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getTypeOfSymbolAtLocation: getTypeOfSymbolAtLocation,
getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
getPropertiesOfType: getPropertiesOfType,
getPropertyOfType: getPropertyOfType,
getSignaturesOfType: getSignaturesOfType,
getIndexTypeOfType: getIndexTypeOfType,
getReturnTypeOfSignature: getReturnTypeOfSignature,
getSymbolsInScope: getSymbolsInScope,
getSymbolAtLocation: getSymbolAtLocation,
getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol,
getTypeAtLocation: getTypeAtLocation,
typeToString: typeToString,
getSymbolDisplayBuilder: getSymbolDisplayBuilder,
symbolToString: symbolToString,
getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
getRootSymbols: getRootSymbols,
getContextualType: getContextualType,
getFullyQualifiedName: getFullyQualifiedName,
getResolvedSignature: getResolvedSignature,
getConstantValue: getConstantValue,
isValidPropertyAccess: isValidPropertyAccess,
getSignatureFromDeclaration: getSignatureFromDeclaration,
isImplementationOfOverload: isImplementationOfOverload,
getAliasedSymbol: resolveImport,
getEmitResolver: getEmitResolver
};
var undefinedSymbol = createSymbol(4 | 67108864, "undefined");
var argumentsSymbol = createSymbol(4 | 67108864, "arguments");
var unknownSymbol = createSymbol(4 | 67108864, "unknown");
var resolvingSymbol = createSymbol(67108864, "__resolving__");
var anyType = createIntrinsicType(1, "any");
var stringType = createIntrinsicType(2, "string");
var numberType = createIntrinsicType(4, "number");
var booleanType = createIntrinsicType(8, "boolean");
var esSymbolType = createIntrinsicType(1048576, "symbol");
var voidType = createIntrinsicType(16, "void");
var undefinedType = createIntrinsicType(32 | 262144, "undefined");
var nullType = createIntrinsicType(64 | 262144, "null");
var unknownType = createIntrinsicType(1, "unknown");
var resolvingType = createIntrinsicType(1, "__resolving__");
var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var inferenceFailureType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
var anySignature = createSignature(undefined, undefined, emptyArray, anyType, 0, false, false);
var unknownSignature = createSignature(undefined, undefined, emptyArray, unknownType, 0, false, false);
var globals = {};
var globalArraySymbol;
var globalESSymbolConstructorSymbol;
var globalObjectType;
var globalFunctionType;
var globalArrayType;
var globalStringType;
var globalNumberType;
var globalBooleanType;
var globalRegExpType;
var globalTemplateStringsArrayType;
var globalESSymbolType;
var anyArrayType;
var tupleTypes = {};
var unionTypes = {};
var stringLiteralTypes = {};
var emitExtends = false;
var mergedSymbols = [];
var symbolLinks = [];
var nodeLinks = [];
var potentialThisCollisions = [];
var diagnostics = ts.createDiagnosticCollection();
var primitiveTypeInfo = {
"string": {
type: stringType,
flags: 258
},
"number": {
type: numberType,
flags: 132
},
"boolean": {
type: booleanType,
flags: 8
},
"symbol": {
type: esSymbolType,
flags: 1048576
}
};
function getEmitResolver(sourceFile) {
getDiagnostics(sourceFile);
return emitResolver;
}
function error(location, message, arg0, arg1, arg2) {
var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2);
diagnostics.add(diagnostic);
}
function createSymbol(flags, name) {
return new Symbol(flags, name);
}
function getExcludedSymbolFlags(flags) {
var result = 0;
if (flags & 2)
result |= 107455;
if (flags & 1)
result |= 107454;
if (flags & 4)
result |= 107455;
if (flags & 8)
result |= 107455;
if (flags & 16)
result |= 106927;
if (flags & 32)
result |= 899583;
if (flags & 64)
result |= 792992;
if (flags & 256)
result |= 899327;
if (flags & 128)
result |= 899967;
if (flags & 512)
result |= 106639;
if (flags & 8192)
result |= 99263;
if (flags & 32768)
result |= 41919;
if (flags & 65536)
result |= 74687;
if (flags & 262144)
result |= 530912;
if (flags & 524288)
result |= 793056;
if (flags & 8388608)
result |= 8388608;
return result;
}
function recordMergedSymbol(target, source) {
if (!source.mergeId)
source.mergeId = nextMergeId++;
mergedSymbols[source.mergeId] = target;
}
function cloneSymbol(symbol) {
var result = createSymbol(symbol.flags | 33554432, symbol.name);
result.declarations = symbol.declarations.slice(0);
result.parent = symbol.parent;
if (symbol.valueDeclaration)
result.valueDeclaration = symbol.valueDeclaration;
if (symbol.constEnumOnlyModule)
result.constEnumOnlyModule = true;
if (symbol.members)
result.members = cloneSymbolTable(symbol.members);
if (symbol.exports)
result.exports = cloneSymbolTable(symbol.exports);
recordMergedSymbol(result, symbol);
return result;
}
function extendSymbol(target, source) {
if (!(target.flags & getExcludedSymbolFlags(source.flags))) {
if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) {
target.constEnumOnlyModule = false;
}
target.flags |= source.flags;
if (!target.valueDeclaration && source.valueDeclaration)
target.valueDeclaration = source.valueDeclaration;
ts.forEach(source.declarations, function (node) {
target.declarations.push(node);
});
if (source.members) {
if (!target.members)
target.members = {};
extendSymbolTable(target.members, source.members);
}
if (source.exports) {
if (!target.exports)
target.exports = {};
extendSymbolTable(target.exports, source.exports);
}
recordMergedSymbol(target, source);
}
else {
var message = target.flags & 2 || source.flags & 2 ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
ts.forEach(source.declarations, function (node) {
error(node.name ? node.name : node, message, symbolToString(source));
});
ts.forEach(target.declarations, function (node) {
error(node.name ? node.name : node, message, symbolToString(source));
});
}
}
function cloneSymbolTable(symbolTable) {
var result = {};
for (var id in symbolTable) {
if (ts.hasProperty(symbolTable, id)) {
result[id] = symbolTable[id];
}
}
return result;
}
function extendSymbolTable(target, source) {
for (var id in source) {
if (ts.hasProperty(source, id)) {
if (!ts.hasProperty(target, id)) {
target[id] = source[id];
}
else {
var symbol = target[id];
if (!(symbol.flags & 33554432)) {
target[id] = symbol = cloneSymbol(symbol);
}
extendSymbol(symbol, source[id]);
}
}
}
}
function getSymbolLinks(symbol) {
if (symbol.flags & 67108864)
return symbol;
if (!symbol.id)
symbol.id = nextSymbolId++;
return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {});
}
function getNodeLinks(node) {
if (!node.id)
node.id = nextNodeId++;
return nodeLinks[node.id] || (nodeLinks[node.id] = {});
}
function getSourceFile(node) {
return ts.getAncestor(node, 210);
}
function isGlobalSourceFile(node) {
return node.kind === 210 && !ts.isExternalModule(node);
}
function getSymbol(symbols, name, meaning) {
if (meaning && ts.hasProperty(symbols, name)) {
var symbol = symbols[name];
ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
if (symbol.flags & meaning) {
return symbol;
}
if (symbol.flags & 8388608) {
var target = resolveImport(symbol);
if (target === unknownSymbol || target.flags & meaning) {
return symbol;
}
}
}
}
function isDefinedBefore(node1, node2) {
var file1 = ts.getSourceFileOfNode(node1);
var file2 = ts.getSourceFileOfNode(node2);
if (file1 === file2) {
return node1.pos <= node2.pos;
}
if (!compilerOptions.out) {
return true;
}
var sourceFiles = host.getSourceFiles();
return sourceFiles.indexOf(file1) <= sourceFiles.indexOf(file2);
}
function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) {
var result;
var lastLocation;
var propertyWithInvalidInitializer;
var errorLocation = location;
loop: while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = getSymbol(location.locals, name, meaning)) {
break loop;
}
}
switch (location.kind) {
case 210:
if (!ts.isExternalModule(location))
break;
case 198:
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8914931)) {
break loop;
}
break;
case 197:
if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) {
break loop;
}
break;
case 128:
case 127:
if (location.parent.kind === 194 && !(location.flags & 128)) {
var ctor = findConstructorDeclaration(location.parent);
if (ctor && ctor.locals) {
if (getSymbol(ctor.locals, name, meaning & 107455)) {
propertyWithInvalidInitializer = location;
}
}
}
break;
case 194:
case 195:
if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) {
if (lastLocation && lastLocation.flags & 128) {
error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
return undefined;
}
break loop;
}
break;
case 124:
var grandparent = location.parent.parent;
if (grandparent.kind === 194 || grandparent.kind === 195) {
if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) {
error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
return undefined;
}
}
break;
case 130:
case 129:
case 131:
case 132:
case 133:
case 193:
case 159:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
break;
case 158:
if (name === "arguments") {
result = argumentsSymbol;
break loop;
}
var id = location.name;
if (id && name === id.text) {
result = location.symbol;
break loop;
}
break;
case 206:
var id = location.name;
if (name === id.text) {
result = location.symbol;
break loop;
}
break;
}
lastLocation = location;
location = location.parent;
}
if (!result) {
result = getSymbol(globals, name, meaning);
}
if (!result) {
if (nameNotFoundMessage) {
error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
}
return undefined;
}
if (nameNotFoundMessage) {
if (propertyWithInvalidInitializer) {
var propertyName = propertyWithInvalidInitializer.name;
error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg));
return undefined;
}
if (result.flags & 2) {
var declaration = ts.forEach(result.declarations, function (d) { return ts.getCombinedNodeFlags(d) & 6144 ? d : undefined; });
ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined");
if (!isDefinedBefore(declaration, errorLocation)) {
error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name));
}
}
}
return result;
}
function resolveImport(symbol) {
ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Imports here.");
var links = getSymbolLinks(symbol);
if (!links.target) {
links.target = resolvingSymbol;
var node = ts.getDeclarationOfKind(symbol, 200);
if (node.moduleReference.kind === 202) {
if (node.moduleReference.expression.kind !== 8) {
grammarErrorOnNode(node.moduleReference.expression, ts.Diagnostics.String_literal_expected);
}
}
var target = node.moduleReference.kind === 202 ? resolveExternalModuleName(node, ts.getExternalModuleImportDeclarationExpression(node)) : getSymbolOfPartOfRightHandSideOfImport(node.moduleReference, node);
if (links.target === resolvingSymbol) {
links.target = target || unknownSymbol;
}
else {
error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
}
}
else if (links.target === resolvingSymbol) {
links.target = unknownSymbol;
}
return links.target;
}
function getSymbolOfPartOfRightHandSideOfImport(entityName, importDeclaration) {
if (!importDeclaration) {
importDeclaration = ts.getAncestor(entityName, 200);
ts.Debug.assert(importDeclaration !== undefined);
}
if (entityName.kind === 64 && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (entityName.kind === 64 || entityName.parent.kind === 123) {
return resolveEntityName(importDeclaration, entityName, 1536);
}
else {
ts.Debug.assert(entityName.parent.kind === 200);
return resolveEntityName(importDeclaration, entityName, 107455 | 793056 | 1536);
}
}
function getFullyQualifiedName(symbol) {
return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
}
function resolveEntityName(location, name, meaning) {
if (ts.getFullWidth(name) === 0) {
return undefined;
}
if (name.kind === 64) {
var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, name);
if (!symbol) {
return;
}
}
else if (name.kind === 123) {
var namespace = resolveEntityName(location, name.left, 1536);
if (!namespace || namespace === unknownSymbol || ts.getFullWidth(name.right) === 0)
return;
var symbol = getSymbol(namespace.exports, name.right.text, meaning);
if (!symbol) {
error(location, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(name.right));
return;
}
}
ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here.");
return symbol.flags & meaning ? symbol : resolveImport(symbol);
}
function isExternalModuleNameRelative(moduleName) {
return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\";
}
function resolveExternalModuleName(location, moduleReferenceExpression) {
if (moduleReferenceExpression.kind !== 8) {
return;
}
var moduleReferenceLiteral = moduleReferenceExpression;
var searchPath = ts.getDirectoryPath(getSourceFile(location).fileName);
var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text);
if (!moduleName)
return;
var isRelative = isExternalModuleNameRelative(moduleName);
if (!isRelative) {
var symbol = getSymbol(globals, '"' + moduleName + '"', 512);
if (symbol) {
return getResolvedExportSymbol(symbol);
}
}
while (true) {
var fileName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
var sourceFile = host.getSourceFile(fileName + ".ts") || host.getSourceFile(fileName + ".d.ts");
if (sourceFile || isRelative)
break;
var parentPath = ts.getDirectoryPath(searchPath);
if (parentPath === searchPath)
break;
searchPath = parentPath;
}
if (sourceFile) {
if (sourceFile.symbol) {
return getResolvedExportSymbol(sourceFile.symbol);
}
error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.fileName);
return;
}
error(moduleReferenceLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName);
}
function getResolvedExportSymbol(moduleSymbol) {
var symbol = getExportAssignmentSymbol(moduleSymbol);
if (symbol) {
if (symbol.flags & (107455 | 793056 | 1536)) {
return symbol;
}
if (symbol.flags & 8388608) {
return resolveImport(symbol);
}
}
return moduleSymbol;
}
function getExportAssignmentSymbol(symbol) {
checkTypeOfExportAssignmentSymbol(symbol);
var symbolLinks = getSymbolLinks(symbol);
return symbolLinks.exportAssignSymbol === unknownSymbol ? undefined : symbolLinks.exportAssignSymbol;
}
function checkTypeOfExportAssignmentSymbol(containerSymbol) {
var symbolLinks = getSymbolLinks(containerSymbol);
if (!symbolLinks.exportAssignSymbol) {
var exportInformation = collectExportInformationForSourceFileOrModule(containerSymbol);
if (exportInformation.exportAssignments.length) {
if (exportInformation.exportAssignments.length > 1) {
ts.forEach(exportInformation.exportAssignments, function (node) { return error(node, ts.Diagnostics.A_module_cannot_have_more_than_one_export_assignment); });
}
var node = exportInformation.exportAssignments[0];
if (exportInformation.hasExportedMember) {
error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
}
if (node.exportName.text) {
var meaning = 107455 | 793056 | 1536;
var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, node.exportName);
}
}
symbolLinks.exportAssignSymbol = exportSymbol || unknownSymbol;
}
}
function collectExportInformationForSourceFileOrModule(symbol) {
var seenExportedMember = false;
var result = [];
ts.forEach(symbol.declarations, function (declaration) {
var block = (declaration.kind === 210 ? declaration : declaration.body);
ts.forEach(block.statements, function (node) {
if (node.kind === 201) {
result.push(node);
}
else {
seenExportedMember = seenExportedMember || (node.flags & 1) !== 0;
}
});
});
return {
hasExportedMember: seenExportedMember,
exportAssignments: result
};
}
function getMergedSymbol(symbol) {
var merged;
return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol;
}
function getSymbolOfNode(node) {
return getMergedSymbol(node.symbol);
}
function getParentOfSymbol(symbol) {
return getMergedSymbol(symbol.parent);
}
function getExportSymbolOfValueSymbolIfExported(symbol) {
return symbol && (symbol.flags & 1048576) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol;
}
function symbolIsValue(symbol) {
if (symbol.flags & 16777216) {
return symbolIsValue(getSymbolLinks(symbol).target);
}
if (symbol.flags & 107455) {
return true;
}
if (symbol.flags & 8388608) {
return (resolveImport(symbol).flags & 107455) !== 0;
}
return false;
}
function findConstructorDeclaration(node) {
var members = node.members;
for (var i = 0; i < members.length; i++) {
var member = members[i];
if (member.kind === 131 && ts.nodeIsPresent(member.body)) {
return member;
}
}
}
function createType(flags) {
var result = new Type(checker, flags);
result.id = typeCount++;
return result;
}
function createIntrinsicType(kind, intrinsicName) {
var type = createType(kind);
type.intrinsicName = intrinsicName;
return type;
}
function createObjectType(kind, symbol) {
var type = createType(kind);
type.symbol = symbol;
return type;
}
function isReservedMemberName(name) {
return name.charCodeAt(0) === 95 &&
name.charCodeAt(1) === 95 &&
name.charCodeAt(2) !== 95 &&
name.charCodeAt(2) !== 64;
}
function getNamedMembers(members) {
var result;
for (var id in members) {
if (ts.hasProperty(members, id)) {
if (!isReservedMemberName(id)) {
if (!result)
result = [];
var symbol = members[id];
if (symbolIsValue(symbol)) {
result.push(symbol);
}
}
}
}
return result || emptyArray;
}
function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
type.members = members;
type.properties = getNamedMembers(members);
type.callSignatures = callSignatures;
type.constructSignatures = constructSignatures;
if (stringIndexType)
type.stringIndexType = stringIndexType;
if (numberIndexType)
type.numberIndexType = numberIndexType;
return type;
}
function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) {
return setObjectTypeMembers(createObjectType(32768, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function forEachSymbolTableInScope(enclosingDeclaration, callback) {
var result;
for (var location = enclosingDeclaration; location; location = location.parent) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = callback(location.locals)) {
return result;
}
}
switch (location.kind) {
case 210:
if (!ts.isExternalModule(location)) {
break;
}
case 198:
if (result = callback(getSymbolOfNode(location).exports)) {
return result;
}
break;
case 194:
case 195:
if (result = callback(getSymbolOfNode(location).members)) {
return result;
}
break;
}
}
return callback(globals);
}
function getQualifiedLeftMeaning(rightMeaning) {
return rightMeaning === 107455 ? 107455 : 1536;
}
function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) {
function getAccessibleSymbolChainFromSymbolTable(symbols) {
function canQualifySymbol(symbolFromSymbolTable, meaning) {
if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) {
return true;
}
var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing);
return !!accessibleParent;
}
function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) {
if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) {
return !ts.forEach(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) &&
canQualifySymbol(symbolFromSymbolTable, meaning);
}
}
if (isAccessible(ts.lookUp(symbols, symbol.name))) {
return [symbol];
}
return ts.forEachValue(symbols, function (symbolFromSymbolTable) {
if (symbolFromSymbolTable.flags & 8388608) {
if (!useOnlyExternalAliasing ||
ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportDeclaration)) {
var resolvedImportedSymbol = resolveImport(symbolFromSymbolTable);
if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) {
return [symbolFromSymbolTable];
}
var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
}
}
}
});
}
if (symbol) {
return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
}
}
function needsQualification(symbol, enclosingDeclaration, meaning) {
var qualify = false;
forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) {
if (!ts.hasProperty(symbolTable, symbol.name)) {
return false;
}
var symbolFromSymbolTable = symbolTable[symbol.name];
if (symbolFromSymbolTable === symbol) {
return true;
}
symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable;
if (symbolFromSymbolTable.flags & meaning) {
qualify = true;
return true;
}
return false;
});
return qualify;
}
function isSymbolAccessible(symbol, enclosingDeclaration, meaning) {
if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) {
var initialSymbol = symbol;
var meaningToLook = meaning;
while (symbol) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false);
if (accessibleSymbolChain) {
var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]);
if (!hasAccessibleDeclarations) {
return {
accessibility: 1,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined
};
}
return hasAccessibleDeclarations;
}
meaningToLook = getQualifiedLeftMeaning(meaning);
symbol = getParentOfSymbol(symbol);
}
var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer);
if (symbolExternalModule) {
var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration);
if (symbolExternalModule !== enclosingExternalModule) {
return {
accessibility: 2,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
errorModuleName: symbolToString(symbolExternalModule)
};
}
}
return {
accessibility: 1,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning)
};
}
return { accessibility: 0 };
function getExternalModuleContainer(declaration) {
for (; declaration; declaration = declaration.parent) {
if (hasExternalModuleSymbol(declaration)) {
return getSymbolOfNode(declaration);
}
}
}
}
function hasExternalModuleSymbol(declaration) {
return (declaration.kind === 198 && declaration.name.kind === 8) ||
(declaration.kind === 210 && ts.isExternalModule(declaration));
}
function hasVisibleDeclarations(symbol) {
var aliasesToMakeVisible;
if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) {
return undefined;
}
return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible };
function getIsDeclarationVisible(declaration) {
if (!isDeclarationVisible(declaration)) {
if (declaration.kind === 200 &&
!(declaration.flags & 1) &&
isDeclarationVisible(declaration.parent)) {
getNodeLinks(declaration).isVisible = true;
if (aliasesToMakeVisible) {
if (!ts.contains(aliasesToMakeVisible, declaration)) {
aliasesToMakeVisible.push(declaration);
}
}
else {
aliasesToMakeVisible = [declaration];
}
return true;
}
return false;
}
return true;
}
}
function isEntityNameVisible(entityName, enclosingDeclaration) {
var meaning;
if (entityName.parent.kind === 140) {
meaning = 107455 | 1048576;
}
else if (entityName.kind === 123 ||
entityName.parent.kind === 200) {
meaning = 1536;
}
else {
meaning = 793056;
}
var firstIdentifier = getFirstIdentifier(entityName);
var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined);
return (symbol && hasVisibleDeclarations(symbol)) || {
accessibility: 1,
errorSymbolName: ts.getTextOfNode(firstIdentifier),
errorNode: firstIdentifier
};
}
function writeKeyword(writer, kind) {
writer.writeKeyword(ts.tokenToString(kind));
}
function writePunctuation(writer, kind) {
writer.writePunctuation(ts.tokenToString(kind));
}
function writeSpace(writer) {
writer.writeSpace(" ");
}
function symbolToString(symbol, enclosingDeclaration, meaning) {
var writer = ts.getSingleLineStringWriter();
getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
var result = writer.string();
ts.releaseStringWriter(writer);
return result;
}
function typeToString(type, enclosingDeclaration, flags) {
var writer = ts.getSingleLineStringWriter();
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
var result = writer.string();
ts.releaseStringWriter(writer);
var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100;
if (maxLength && result.length >= maxLength) {
result = result.substr(0, maxLength - "...".length) + "...";
}
return result;
}
function getTypeAliasForTypeLiteral(type) {
if (type.symbol && type.symbol.flags & 2048) {
var node = type.symbol.declarations[0].parent;
while (node.kind === 145) {
node = node.parent;
}
if (node.kind === 196) {
return getSymbolOfNode(node);
}
}
return undefined;
}
var _displayBuilder;
function getSymbolDisplayBuilder() {
function appendSymbolNameOnly(symbol, writer) {
if (symbol.declarations && symbol.declarations.length > 0) {
var declaration = symbol.declarations[0];
if (declaration.name) {
writer.writeSymbol(ts.declarationNameToString(declaration.name), symbol);
return;
}
}
writer.writeSymbol(symbol.name, symbol);
}
function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) {
var parentSymbol;
function appendParentTypeArgumentsAndSymbolName(symbol) {
if (parentSymbol) {
if (flags & 1) {
if (symbol.flags & 16777216) {
buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration);
}
else {
buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration);
}
}
writePunctuation(writer, 20);
}
parentSymbol = symbol;
appendSymbolNameOnly(symbol, writer);
}
writer.trackSymbol(symbol, enclosingDeclaration, meaning);
function walkSymbol(symbol, meaning) {
if (symbol) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2));
if (!accessibleSymbolChain ||
needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning));
}
if (accessibleSymbolChain) {
for (var i = 0, n = accessibleSymbolChain.length; i < n; i++) {
appendParentTypeArgumentsAndSymbolName(accessibleSymbolChain[i]);
}
}
else {
if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) {
return;
}
if (symbol.flags & 2048 || symbol.flags & 4096) {
return;
}
appendParentTypeArgumentsAndSymbolName(symbol);
}
}
}
var isTypeParameter = symbol.flags & 262144;
var typeFormatFlag = 128 & typeFlags;
if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) {
walkSymbol(symbol, meaning);
return;
}
return appendParentTypeArgumentsAndSymbolName(symbol);
}
function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, typeStack) {
var globalFlagsToPass = globalFlags & 16;
return writeType(type, globalFlags);
function writeType(type, flags) {
if (type.flags & 1048703) {
writer.writeKeyword(!(globalFlags & 16) &&
(type.flags & 1) ? "any" : type.intrinsicName);
}
else if (type.flags & 4096) {
writeTypeReference(type, flags);
}
else if (type.flags & (1024 | 2048 | 128 | 512)) {
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags);
}
else if (type.flags & 8192) {
writeTupleType(type);
}
else if (type.flags & 16384) {
writeUnionType(type, flags);
}
else if (type.flags & 32768) {
writeAnonymousType(type, flags);
}
else if (type.flags & 256) {
writer.writeStringLiteral(type.text);
}
else {
writePunctuation(writer, 14);
writeSpace(writer);
writePunctuation(writer, 21);
writeSpace(writer);
writePunctuation(writer, 15);
}
}
function writeTypeList(types, union) {
for (var i = 0; i < types.length; i++) {
if (i > 0) {
if (union) {
writeSpace(writer);
}
writePunctuation(writer, union ? 44 : 23);
writeSpace(writer);
}
writeType(types[i], union ? 64 : 0);
}
}
function writeTypeReference(type, flags) {
if (type.target === globalArrayType && !(flags & 1)) {
writeType(type.typeArguments[0], 64);
writePunctuation(writer, 18);
writePunctuation(writer, 19);
}
else {
buildSymbolDisplay(type.target.symbol, writer, enclosingDeclaration, 793056);
writePunctuation(writer, 24);
writeTypeList(type.typeArguments, false);
writePunctuation(writer, 25);
}
}
function writeTupleType(type) {
writePunctuation(writer, 18);
writeTypeList(type.elementTypes, false);
writePunctuation(writer, 19);
}
function writeUnionType(type, flags) {
if (flags & 64) {
writePunctuation(writer, 16);
}
writeTypeList(type.types, true);
if (flags & 64) {
writePunctuation(writer, 17);
}
}
function writeAnonymousType(type, flags) {
if (type.symbol && type.symbol.flags & (32 | 384 | 512)) {
writeTypeofSymbol(type, flags);
}
else if (shouldWriteTypeOfFunctionSymbol()) {
writeTypeofSymbol(type, flags);
}
else if (typeStack && ts.contains(typeStack, type)) {
var typeAlias = getTypeAliasForTypeLiteral(type);
if (typeAlias) {
buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags);
}
else {
writeKeyword(writer, 110);
}
}
else {
if (!typeStack) {
typeStack = [];
}
typeStack.push(type);
writeLiteralType(type, flags);
typeStack.pop();
}
function shouldWriteTypeOfFunctionSymbol() {
if (type.symbol) {
var isStaticMethodSymbol = !!(type.symbol.flags & 8192 &&
ts.forEach(type.symbol.declarations, function (declaration) { return declaration.flags & 128; }));
var isNonLocalFunctionSymbol = !!(type.symbol.flags & 16) &&
(type.symbol.parent ||
ts.forEach(type.symbol.declarations, function (declaration) { return declaration.parent.kind === 210 || declaration.parent.kind === 199; }));
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
return !!(flags & 2) ||
(typeStack && ts.contains(typeStack, type));
}
}
}
}
function writeTypeofSymbol(type, typeFormatFlags) {
writeKeyword(writer, 96);
writeSpace(writer);
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags);
}
function getIndexerParameterName(type, indexKind, fallbackName) {
var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind);
if (!declaration) {
return fallbackName;
}
ts.Debug.assert(declaration.parameters.length !== 0);
return ts.declarationNameToString(declaration.parameters[0].name);
}
function writeLiteralType(type, flags) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) {
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
writePunctuation(writer, 14);
writePunctuation(writer, 15);
return;
}
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
if (flags & 64) {
writePunctuation(writer, 16);
}
buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
if (flags & 64) {
writePunctuation(writer, 17);
}
return;
}
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
if (flags & 64) {
writePunctuation(writer, 16);
}
writeKeyword(writer, 87);
writeSpace(writer);
buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, typeStack);
if (flags & 64) {
writePunctuation(writer, 17);
}
return;
}
}
writePunctuation(writer, 14);
writer.writeLine();
writer.increaseIndent();
for (var i = 0; i < resolved.callSignatures.length; i++) {
buildSignatureDisplay(resolved.callSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 22);
writer.writeLine();
}
for (var i = 0; i < resolved.constructSignatures.length; i++) {
writeKeyword(writer, 87);
writeSpace(writer);
buildSignatureDisplay(resolved.constructSignatures[i], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 22);
writer.writeLine();
}
if (resolved.stringIndexType) {
writePunctuation(writer, 18);
writer.writeParameter(getIndexerParameterName(resolved, 0, "x"));
writePunctuation(writer, 51);
writeSpace(writer);
writeKeyword(writer, 119);
writePunctuation(writer, 19);
writePunctuation(writer, 51);
writeSpace(writer);
writeType(resolved.stringIndexType, 0);
writePunctuation(writer, 22);
writer.writeLine();
}
if (resolved.numberIndexType) {
writePunctuation(writer, 18);
writer.writeParameter(getIndexerParameterName(resolved, 1, "x"));
writePunctuation(writer, 51);
writeSpace(writer);
writeKeyword(writer, 117);
writePunctuation(writer, 19);
writePunctuation(writer, 51);
writeSpace(writer);
writeType(resolved.numberIndexType, 0);
writePunctuation(writer, 22);
writer.writeLine();
}
for (var i = 0; i < resolved.properties.length; i++) {
var p = resolved.properties[i];
var t = getTypeOfSymbol(p);
if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) {
var signatures = getSignaturesOfType(t, 0);
for (var j = 0; j < signatures.length; j++) {
buildSymbolDisplay(p, writer);
if (p.flags & 536870912) {
writePunctuation(writer, 50);
}
buildSignatureDisplay(signatures[j], writer, enclosingDeclaration, globalFlagsToPass, typeStack);
writePunctuation(writer, 22);
writer.writeLine();
}
}
else {
buildSymbolDisplay(p, writer);
if (p.flags & 536870912) {
writePunctuation(writer, 50);
}
writePunctuation(writer, 51);
writeSpace(writer);
writeType(t, 0);
writePunctuation(writer, 22);
writer.writeLine();
}
}
writer.decreaseIndent();
writePunctuation(writer, 15);
}
}
function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaraiton, flags) {
var targetSymbol = getTargetSymbol(symbol);
if (targetSymbol.flags & 32 || targetSymbol.flags & 64) {
buildDisplayForTypeParametersAndDelimiters(getTypeParametersOfClassOrInterface(symbol), writer, enclosingDeclaraiton, flags);
}
}
function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, typeStack) {
appendSymbolNameOnly(tp.symbol, writer);
var constraint = getConstraintOfTypeParameter(tp);
if (constraint) {
writeSpace(writer);
writeKeyword(writer, 78);
writeSpace(writer);
buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, typeStack);
}
}
function buildParameterDisplay(p, writer, enclosingDeclaration, flags, typeStack) {
if (ts.hasDotDotDotToken(p.valueDeclaration)) {
writePunctuation(writer, 21);
}
appendSymbolNameOnly(p, writer);
if (ts.hasQuestionToken(p.valueDeclaration) || p.valueDeclaration.initializer) {
writePunctuation(writer, 50);
}
writePunctuation(writer, 51);
writeSpace(writer);
buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, typeStack);
}
function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, typeStack) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 24);
for (var i = 0; i < typeParameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 23);
writeSpace(writer);
}
buildTypeParameterDisplay(typeParameters[i], writer, enclosingDeclaration, flags, typeStack);
}
writePunctuation(writer, 25);
}
}
function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, typeStack) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 24);
for (var i = 0; i < typeParameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 23);
writeSpace(writer);
}
buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0);
}
writePunctuation(writer, 25);
}
}
function buildDisplayForParametersAndDelimiters(parameters, writer, enclosingDeclaration, flags, typeStack) {
writePunctuation(writer, 16);
for (var i = 0; i < parameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 23);
writeSpace(writer);
}
buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, typeStack);
}
writePunctuation(writer, 17);
}
function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
if (flags & 8) {
writeSpace(writer);
writePunctuation(writer, 32);
}
else {
writePunctuation(writer, 51);
}
writeSpace(writer);
buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags, typeStack);
}
function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, typeStack) {
if (signature.target && (flags & 32)) {
buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
}
else {
buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, typeStack);
}
buildDisplayForParametersAndDelimiters(signature.parameters, writer, enclosingDeclaration, flags, typeStack);
buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, typeStack);
}
return _displayBuilder || (_displayBuilder = {
symbolToString: symbolToString,
typeToString: typeToString,
buildSymbolDisplay: buildSymbolDisplay,
buildTypeDisplay: buildTypeDisplay,
buildTypeParameterDisplay: buildTypeParameterDisplay,
buildParameterDisplay: buildParameterDisplay,
buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
buildDisplayForTypeArgumentsAndDelimiters: buildDisplayForTypeArgumentsAndDelimiters,
buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
buildSignatureDisplay: buildSignatureDisplay,
buildReturnTypeDisplay: buildReturnTypeDisplay
});
}
function isDeclarationVisible(node) {
function getContainingExternalModule(node) {
for (; node; node = node.parent) {
if (node.kind === 198) {
if (node.name.kind === 8) {
return node;
}
}
else if (node.kind === 210) {
return ts.isExternalModule(node) ? node : undefined;
}
}
ts.Debug.fail("getContainingModule cant reach here");
}
function isUsedInExportAssignment(node) {
var externalModule = getContainingExternalModule(node);
if (externalModule) {
var externalModuleSymbol = getSymbolOfNode(externalModule);
var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol);
var resolvedExportSymbol;
var symbolOfNode = getSymbolOfNode(node);
if (isSymbolUsedInExportAssignment(symbolOfNode)) {
return true;
}
if (symbolOfNode.flags & 8388608) {
return isSymbolUsedInExportAssignment(resolveImport(symbolOfNode));
}
}
function isSymbolUsedInExportAssignment(symbol) {
if (exportAssignmentSymbol === symbol) {
return true;
}
if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 8388608)) {
resolvedExportSymbol = resolvedExportSymbol || resolveImport(exportAssignmentSymbol);
if (resolvedExportSymbol === symbol) {
return true;
}
return ts.forEach(resolvedExportSymbol.declarations, function (current) {
while (current) {
if (current === node) {
return true;
}
current = current.parent;
}
});
}
}
}
function determineIfDeclarationIsVisible() {
switch (node.kind) {
case 191:
case 148:
case 198:
case 194:
case 195:
case 196:
case 193:
case 197:
case 200:
var parent = getDeclarationContainer(node);
if (!(ts.getCombinedNodeFlags(node) & 1) &&
!(node.kind !== 200 && parent.kind !== 210 && ts.isInAmbientContext(parent))) {
return isGlobalSourceFile(parent) || isUsedInExportAssignment(node);
}
return isDeclarationVisible(parent);
case 128:
case 127:
case 132:
case 133:
case 130:
case 129:
if (node.flags & (32 | 64)) {
return false;
}
case 131:
case 135:
case 134:
case 136:
case 126:
case 199:
case 138:
case 139:
case 141:
case 137:
case 142:
case 143:
case 144:
case 145:
return isDeclarationVisible(node.parent);
case 125:
case 210:
return true;
default:
ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind);
}
}
if (node) {
var links = getNodeLinks(node);
if (links.isVisible === undefined) {
links.isVisible = !!determineIfDeclarationIsVisible();
}
return links.isVisible;
}
}
function getRootDeclaration(node) {
while (node.kind === 148) {
node = node.parent.parent;
}
return node;
}
function getDeclarationContainer(node) {
node = getRootDeclaration(node);
return node.kind === 191 ? node.parent.parent.parent : node.parent;
}
function getTypeOfPrototypeProperty(prototype) {
var classType = getDeclaredTypeOfSymbol(prototype.parent);
return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType;
}
function getTypeOfPropertyOfType(type, name) {
var prop = getPropertyOfType(type, name);
return prop ? getTypeOfSymbol(prop) : undefined;
}
function getTypeForBindingElement(declaration) {
var pattern = declaration.parent;
var parentType = getTypeForVariableLikeDeclaration(pattern.parent);
if (parentType === unknownType) {
return unknownType;
}
if (!parentType || parentType === anyType) {
if (declaration.initializer) {
return checkExpressionCached(declaration.initializer);
}
return parentType;
}
if (pattern.kind === 146) {
var name = declaration.propertyName || declaration.name;
var type = getTypeOfPropertyOfType(parentType, name.text) ||
isNumericLiteralName(name.text) && getIndexTypeOfType(parentType, 1) ||
getIndexTypeOfType(parentType, 0);
if (!type) {
error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name));
return unknownType;
}
}
else {
if (!isTypeAssignableTo(parentType, anyArrayType)) {
error(pattern, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(parentType));
return unknownType;
}
if (!declaration.dotDotDotToken) {
var propName = "" + ts.indexOf(pattern.elements, declaration);
var type = isTupleLikeType(parentType) ? getTypeOfPropertyOfType(parentType, propName) : getIndexTypeOfType(parentType, 1);
if (!type) {
error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName);
return unknownType;
}
}
else {
var type = createArrayType(getIndexTypeOfType(parentType, 1));
}
}
return type;
}
function getTypeForVariableLikeDeclaration(declaration) {
if (declaration.parent.parent.kind === 180) {
return anyType;
}
if (ts.isBindingPattern(declaration.parent)) {
return getTypeForBindingElement(declaration);
}
if (declaration.type) {
return getTypeFromTypeNode(declaration.type);
}
if (declaration.kind === 126) {
var func = declaration.parent;
if (func.kind === 133 && !ts.hasDynamicName(func)) {
var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 132);
if (getter) {
return getReturnTypeOfSignature(getSignatureFromDeclaration(getter));
}
}
var type = getContextuallyTypedParameterType(declaration);
if (type) {
return type;
}
}
if (declaration.initializer) {
return checkExpressionCached(declaration.initializer);
}
if (declaration.kind === 208) {
return checkIdentifier(declaration.name);
}
return undefined;
}
function getTypeFromBindingElement(element) {
if (element.initializer) {
return getWidenedType(checkExpressionCached(element.initializer));
}
if (ts.isBindingPattern(element.name)) {
return getTypeFromBindingPattern(element.name);
}
return anyType;
}
function getTypeFromObjectBindingPattern(pattern) {
var members = {};
ts.forEach(pattern.elements, function (e) {
var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0);
var name = e.propertyName || e.name;
var symbol = createSymbol(flags, name.text);
symbol.type = getTypeFromBindingElement(e);
members[symbol.name] = symbol;
});
return createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined);
}
function getTypeFromArrayBindingPattern(pattern) {
var hasSpreadElement = false;
var elementTypes = [];
ts.forEach(pattern.elements, function (e) {
elementTypes.push(e.kind === 170 || e.dotDotDotToken ? anyType : getTypeFromBindingElement(e));
if (e.dotDotDotToken) {
hasSpreadElement = true;
}
});
return !elementTypes.length ? anyArrayType : hasSpreadElement ? createArrayType(getUnionType(elementTypes)) : createTupleType(elementTypes);
}
function getTypeFromBindingPattern(pattern) {
return pattern.kind === 146 ? getTypeFromObjectBindingPattern(pattern) : getTypeFromArrayBindingPattern(pattern);
}
function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
var type = getTypeForVariableLikeDeclaration(declaration);
if (type) {
if (reportErrors) {
reportErrorsFromWidening(declaration, type);
}
return declaration.kind !== 207 ? getWidenedType(type) : type;
}
if (ts.isBindingPattern(declaration.name)) {
return getTypeFromBindingPattern(declaration.name);
}
type = declaration.dotDotDotToken ? anyArrayType : anyType;
if (reportErrors && compilerOptions.noImplicitAny) {
var root = getRootDeclaration(declaration);
if (!isPrivateWithinAmbient(root) && !(root.kind === 126 && isPrivateWithinAmbient(root.parent))) {
reportImplicitAnyError(declaration, type);
}
}
return type;
}
function getTypeOfVariableOrParameterOrProperty(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
if (symbol.flags & 134217728) {
return links.type = getTypeOfPrototypeProperty(symbol);
}
var declaration = symbol.valueDeclaration;
if (declaration.kind === 206) {
return links.type = anyType;
}
links.type = resolvingType;
var type = getWidenedTypeForVariableLikeDeclaration(declaration, true);
if (links.type === resolvingType) {
links.type = type;
}
}
else if (links.type === resolvingType) {
links.type = anyType;
if (compilerOptions.noImplicitAny) {
var diagnostic = symbol.valueDeclaration.type ? ts.Diagnostics._0_implicitly_has_type_any_because_it_is_referenced_directly_or_indirectly_in_its_own_type_annotation : ts.Diagnostics._0_implicitly_has_type_any_because_it_is_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer;
error(symbol.valueDeclaration, diagnostic, symbolToString(symbol));
}
}
return links.type;
}
function getSetAccessorTypeAnnotationNode(accessor) {
return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type;
}
function getAnnotatedAccessorType(accessor) {
if (accessor) {
if (accessor.kind === 132) {
return accessor.type && getTypeFromTypeNode(accessor.type);
}
else {
var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor);
return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
}
}
return undefined;
}
function getTypeOfAccessors(symbol) {
var links = getSymbolLinks(symbol);
checkAndStoreTypeOfAccessors(symbol, links);
return links.type;
}
function checkAndStoreTypeOfAccessors(symbol, links) {
links = links || getSymbolLinks(symbol);
if (!links.type) {
links.type = resolvingType;
var getter = ts.getDeclarationOfKind(symbol, 132);
var setter = ts.getDeclarationOfKind(symbol, 133);
var type;
var getterReturnType = getAnnotatedAccessorType(getter);
if (getterReturnType) {
type = getterReturnType;
}
else {
var setterParameterType = getAnnotatedAccessorType(setter);
if (setterParameterType) {
type = setterParameterType;
}
else {
if (getter && getter.body) {
type = getReturnTypeFromBody(getter);
}
else {
if (compilerOptions.noImplicitAny) {
error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol));
}
type = anyType;
}
}
}
if (links.type === resolvingType) {
links.type = type;
}
}
else if (links.type === resolvingType) {
links.type = anyType;
if (compilerOptions.noImplicitAny) {
var getter = ts.getDeclarationOfKind(symbol, 132);
error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
}
}
}
function getTypeOfFuncClassEnumModule(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = createObjectType(32768, symbol);
}
return links.type;
}
function getTypeOfEnumMember(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
}
return links.type;
}
function getTypeOfImport(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = getTypeOfSymbol(resolveImport(symbol));
}
return links.type;
}
function getTypeOfInstantiatedSymbol(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper);
}
return links.type;
}
function getTypeOfSymbol(symbol) {
if (symbol.flags & 16777216) {
return getTypeOfInstantiatedSymbol(symbol);
}
if (symbol.flags & (3 | 4)) {
return getTypeOfVariableOrParameterOrProperty(symbol);
}
if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) {
return getTypeOfFuncClassEnumModule(symbol);
}
if (symbol.flags & 8) {
return getTypeOfEnumMember(symbol);
}
if (symbol.flags & 98304) {
return getTypeOfAccessors(symbol);
}
if (symbol.flags & 8388608) {
return getTypeOfImport(symbol);
}
return unknownType;
}
function getTargetType(type) {
return type.flags & 4096 ? type.target : type;
}
function hasBaseType(type, checkBase) {
return check(type);
function check(type) {
var target = getTargetType(type);
return target === checkBase || ts.forEach(target.baseTypes, check);
}
}
function getTypeParametersOfClassOrInterface(symbol) {
var result;
ts.forEach(symbol.declarations, function (node) {
if (node.kind === 195 || node.kind === 194) {
var declaration = node;
if (declaration.typeParameters && declaration.typeParameters.length) {
ts.forEach(declaration.typeParameters, function (node) {
var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
if (!result) {
result = [tp];
}
else if (!ts.contains(result, tp)) {
result.push(tp);
}
});
}
}
});
return result;
}
function getDeclaredTypeOfClass(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = links.declaredType = createObjectType(1024, symbol);
var typeParameters = getTypeParametersOfClassOrInterface(symbol);
if (typeParameters) {
type.flags |= 4096;
type.typeParameters = typeParameters;
type.instantiations = {};
type.instantiations[getTypeListId(type.typeParameters)] = type;
type.target = type;
type.typeArguments = type.typeParameters;
}
type.baseTypes = [];
var declaration = ts.getDeclarationOfKind(symbol, 194);
var baseTypeNode = ts.getClassBaseTypeNode(declaration);
if (baseTypeNode) {
var baseType = getTypeFromTypeReferenceNode(baseTypeNode);
if (baseType !== unknownType) {
if (getTargetType(baseType).flags & 1024) {
if (type !== baseType && !hasBaseType(baseType, type)) {
type.baseTypes.push(baseType);
}
else {
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
}
}
else {
error(baseTypeNode, ts.Diagnostics.A_class_may_only_extend_another_class);
}
}
}
type.declaredProperties = getNamedMembers(symbol.members);
type.declaredCallSignatures = emptyArray;
type.declaredConstructSignatures = emptyArray;
type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0);
type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1);
}
return links.declaredType;
}
function getDeclaredTypeOfInterface(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = links.declaredType = createObjectType(2048, symbol);
var typeParameters = getTypeParametersOfClassOrInterface(symbol);
if (typeParameters) {
type.flags |= 4096;
type.typeParameters = typeParameters;
type.instantiations = {};
type.instantiations[getTypeListId(type.typeParameters)] = type;
type.target = type;
type.typeArguments = type.typeParameters;
}
type.baseTypes = [];
ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 195 && ts.getInterfaceBaseTypeNodes(declaration)) {
ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), function (node) {
var baseType = getTypeFromTypeReferenceNode(node);
if (baseType !== unknownType) {
if (getTargetType(baseType).flags & (1024 | 2048)) {
if (type !== baseType && !hasBaseType(baseType, type)) {
type.baseTypes.push(baseType);
}
else {
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1));
}
}
else {
error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface);
}
}
});
}
});
type.declaredProperties = getNamedMembers(symbol.members);
type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]);
type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]);
type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0);
type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1);
}
return links.declaredType;
}
function getDeclaredTypeOfTypeAlias(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
links.declaredType = resolvingType;
var declaration = ts.getDeclarationOfKind(symbol, 196);
var type = getTypeFromTypeNode(declaration.type);
if (links.declaredType === resolvingType) {
links.declaredType = type;
}
}
else if (links.declaredType === resolvingType) {
links.declaredType = unknownType;
var declaration = ts.getDeclarationOfKind(symbol, 196);
error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
}
return links.declaredType;
}
function getDeclaredTypeOfEnum(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = createType(128);
type.symbol = symbol;
links.declaredType = type;
}
return links.declaredType;
}
function getDeclaredTypeOfTypeParameter(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = createType(512);
type.symbol = symbol;
if (!ts.getDeclarationOfKind(symbol, 125).constraint) {
type.constraint = noConstraintType;
}
links.declaredType = type;
}
return links.declaredType;
}
function getDeclaredTypeOfImport(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
links.declaredType = getDeclaredTypeOfSymbol(resolveImport(symbol));
}
return links.declaredType;
}
function getDeclaredTypeOfSymbol(symbol) {
ts.Debug.assert((symbol.flags & 16777216) === 0);
if (symbol.flags & 32) {
return getDeclaredTypeOfClass(symbol);
}
if (symbol.flags & 64) {
return getDeclaredTypeOfInterface(symbol);
}
if (symbol.flags & 524288) {
return getDeclaredTypeOfTypeAlias(symbol);
}
if (symbol.flags & 384) {
return getDeclaredTypeOfEnum(symbol);
}
if (symbol.flags & 262144) {
return getDeclaredTypeOfTypeParameter(symbol);
}
if (symbol.flags & 8388608) {
return getDeclaredTypeOfImport(symbol);
}
return unknownType;
}
function createSymbolTable(symbols) {
var result = {};
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
result[symbol.name] = symbol;
}
return result;
}
function createInstantiatedSymbolTable(symbols, mapper) {
var result = {};
for (var i = 0; i < symbols.length; i++) {
var symbol = symbols[i];
result[symbol.name] = instantiateSymbol(symbol, mapper);
}
return result;
}
function addInheritedMembers(symbols, baseSymbols) {
for (var i = 0; i < baseSymbols.length; i++) {
var s = baseSymbols[i];
if (!ts.hasProperty(symbols, s.name)) {
symbols[s.name] = s;
}
}
}
function addInheritedSignatures(signatures, baseSignatures) {
if (baseSignatures) {
for (var i = 0; i < baseSignatures.length; i++) {
signatures.push(baseSignatures[i]);
}
}
}
function resolveClassOrInterfaceMembers(type) {
var members = type.symbol.members;
var callSignatures = type.declaredCallSignatures;
var constructSignatures = type.declaredConstructSignatures;
var stringIndexType = type.declaredStringIndexType;
var numberIndexType = type.declaredNumberIndexType;
if (type.baseTypes.length) {
members = createSymbolTable(type.declaredProperties);
ts.forEach(type.baseTypes, function (baseType) {
addInheritedMembers(members, getPropertiesOfObjectType(baseType));
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0));
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1));
stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0);
numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1);
});
}
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveTypeReferenceMembers(type) {
var target = type.target;
var mapper = createTypeMapper(target.typeParameters, type.typeArguments);
var members = createInstantiatedSymbolTable(target.declaredProperties, mapper);
var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature);
var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature);
var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined;
var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined;
ts.forEach(target.baseTypes, function (baseType) {
var instantiatedBaseType = instantiateType(baseType, mapper);
addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType));
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0));
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1));
stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0);
numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1);
});
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) {
var sig = new Signature(checker);
sig.declaration = declaration;
sig.typeParameters = typeParameters;
sig.parameters = parameters;
sig.resolvedReturnType = resolvedReturnType;
sig.minArgumentCount = minArgumentCount;
sig.hasRestParameter = hasRestParameter;
sig.hasStringLiterals = hasStringLiterals;
return sig;
}
function cloneSignature(sig) {
return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals);
}
function getDefaultConstructSignatures(classType) {
if (classType.baseTypes.length) {
var baseType = classType.baseTypes[0];
var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1);
return ts.map(baseSignatures, function (baseSignature) {
var signature = baseType.flags & 4096 ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature);
signature.typeParameters = classType.typeParameters;
signature.resolvedReturnType = classType;
return signature;
});
}
return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)];
}
function createTupleTypeMemberSymbols(memberTypes) {
var members = {};
for (var i = 0; i < memberTypes.length; i++) {
var symbol = createSymbol(4 | 67108864, "" + i);
symbol.type = memberTypes[i];
members[i] = symbol;
}
return members;
}
function resolveTupleTypeMembers(type) {
var arrayType = resolveObjectOrUnionTypeMembers(createArrayType(getUnionType(type.elementTypes)));
var members = createTupleTypeMemberSymbols(type.elementTypes);
addInheritedMembers(members, arrayType.properties);
setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
}
function signatureListsIdentical(s, t) {
if (s.length !== t.length) {
return false;
}
for (var i = 0; i < s.length; i++) {
if (!compareSignatures(s[i], t[i], false, compareTypes)) {
return false;
}
}
return true;
}
function getUnionSignatures(types, kind) {
var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); });
var signatures = signatureLists[0];
for (var i = 0; i < signatures.length; i++) {
if (signatures[i].typeParameters) {
return emptyArray;
}
}
for (var i = 1; i < signatureLists.length; i++) {
if (!signatureListsIdentical(signatures, signatureLists[i])) {
return emptyArray;
}
}
var result = ts.map(signatures, cloneSignature);
for (var i = 0; i < result.length; i++) {
var s = result[i];
s.resolvedReturnType = undefined;
s.unionSignatures = ts.map(signatureLists, function (signatures) { return signatures[i]; });
}
return result;
}
function getUnionIndexType(types, kind) {
var indexTypes = [];
for (var i = 0; i < types.length; i++) {
var indexType = getIndexTypeOfType(types[i], kind);
if (!indexType) {
return undefined;
}
indexTypes.push(indexType);
}
return getUnionType(indexTypes);
}
function resolveUnionTypeMembers(type) {
var callSignatures = getUnionSignatures(type.types, 0);
var constructSignatures = getUnionSignatures(type.types, 1);
var stringIndexType = getUnionIndexType(type.types, 0);
var numberIndexType = getUnionIndexType(type.types, 1);
setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveAnonymousTypeMembers(type) {
var symbol = type.symbol;
if (symbol.flags & 2048) {
var members = symbol.members;
var callSignatures = getSignaturesOfSymbol(members["__call"]);
var constructSignatures = getSignaturesOfSymbol(members["__new"]);
var stringIndexType = getIndexTypeOfSymbol(symbol, 0);
var numberIndexType = getIndexTypeOfSymbol(symbol, 1);
}
else {
var members = emptySymbols;
var callSignatures = emptyArray;
var constructSignatures = emptyArray;
if (symbol.flags & 1952) {
members = symbol.exports;
}
if (symbol.flags & (16 | 8192)) {
callSignatures = getSignaturesOfSymbol(symbol);
}
if (symbol.flags & 32) {
var classType = getDeclaredTypeOfClass(symbol);
constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]);
if (!constructSignatures.length) {
constructSignatures = getDefaultConstructSignatures(classType);
}
if (classType.baseTypes.length) {
members = createSymbolTable(getNamedMembers(members));
addInheritedMembers(members, getPropertiesOfObjectType(getTypeOfSymbol(classType.baseTypes[0].symbol)));
}
}
var stringIndexType = undefined;
var numberIndexType = (symbol.flags & 384) ? stringType : undefined;
}
setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType);
}
function resolveObjectOrUnionTypeMembers(type) {
if (!type.members) {
if (type.flags & (1024 | 2048)) {
resolveClassOrInterfaceMembers(type);
}
else if (type.flags & 32768) {
resolveAnonymousTypeMembers(type);
}
else if (type.flags & 8192) {
resolveTupleTypeMembers(type);
}
else if (type.flags & 16384) {
resolveUnionTypeMembers(type);
}
else {
resolveTypeReferenceMembers(type);
}
}
return type;
}
function getPropertiesOfObjectType(type) {
if (type.flags & 48128) {
return resolveObjectOrUnionTypeMembers(type).properties;
}
return emptyArray;
}
function getPropertyOfObjectType(type, name) {
if (type.flags & 48128) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (ts.hasProperty(resolved.members, name)) {
var symbol = resolved.members[name];
if (symbolIsValue(symbol)) {
return symbol;
}
}
}
}
function getPropertiesOfUnionType(type) {
var result = [];
ts.forEach(getPropertiesOfType(type.types[0]), function (prop) {
var unionProp = getPropertyOfUnionType(type, prop.name);
if (unionProp) {
result.push(unionProp);
}
});
return result;
}
function getPropertiesOfType(type) {
if (type.flags & 16384) {
return getPropertiesOfUnionType(type);
}
return getPropertiesOfObjectType(getApparentType(type));
}
function getApparentType(type) {
if (type.flags & 512) {
do {
type = getConstraintOfTypeParameter(type);
} while (type && type.flags & 512);
if (!type) {
type = emptyObjectType;
}
}
if (type.flags & 258) {
type = globalStringType;
}
else if (type.flags & 132) {
type = globalNumberType;
}
else if (type.flags & 8) {
type = globalBooleanType;
}
else if (type.flags & 1048576) {
type = globalESSymbolType;
}
return type;
}
function createUnionProperty(unionType, name) {
var types = unionType.types;
var props;
for (var i = 0; i < types.length; i++) {
var type = getApparentType(types[i]);
if (type !== unknownType) {
var prop = getPropertyOfType(type, name);
if (!prop) {
return undefined;
}
if (!props) {
props = [prop];
}
else {
props.push(prop);
}
}
}
var propTypes = [];
var declarations = [];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (prop.declarations) {
declarations.push.apply(declarations, prop.declarations);
}
propTypes.push(getTypeOfSymbol(prop));
}
var result = createSymbol(4 | 67108864 | 268435456, name);
result.unionType = unionType;
result.declarations = declarations;
result.type = getUnionType(propTypes);
return result;
}
function getPropertyOfUnionType(type, name) {
var properties = type.resolvedProperties || (type.resolvedProperties = {});
if (ts.hasProperty(properties, name)) {
return properties[name];
}
var property = createUnionProperty(type, name);
if (property) {
properties[name] = property;
}
return property;
}
function getPropertyOfType(type, name) {
if (type.flags & 16384) {
return getPropertyOfUnionType(type, name);
}
if (!(type.flags & 48128)) {
type = getApparentType(type);
if (!(type.flags & 48128)) {
return undefined;
}
}
var resolved = resolveObjectOrUnionTypeMembers(type);
if (ts.hasProperty(resolved.members, name)) {
var symbol = resolved.members[name];
if (symbolIsValue(symbol)) {
return symbol;
}
}
if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) {
var symbol = getPropertyOfObjectType(globalFunctionType, name);
if (symbol)
return symbol;
}
return getPropertyOfObjectType(globalObjectType, name);
}
function getSignaturesOfObjectOrUnionType(type, kind) {
if (type.flags & (48128 | 16384)) {
var resolved = resolveObjectOrUnionTypeMembers(type);
return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
}
return emptyArray;
}
function getSignaturesOfType(type, kind) {
return getSignaturesOfObjectOrUnionType(getApparentType(type), kind);
}
function getIndexTypeOfObjectOrUnionType(type, kind) {
if (type.flags & (48128 | 16384)) {
var resolved = resolveObjectOrUnionTypeMembers(type);
return kind === 0 ? resolved.stringIndexType : resolved.numberIndexType;
}
}
function getIndexTypeOfType(type, kind) {
return getIndexTypeOfObjectOrUnionType(getApparentType(type), kind);
}
function getTypeParametersFromDeclaration(typeParameterDeclarations) {
var result = [];
ts.forEach(typeParameterDeclarations, function (node) {
var tp = getDeclaredTypeOfTypeParameter(node.symbol);
if (!ts.contains(result, tp)) {
result.push(tp);
}
});
return result;
}
function getSignatureFromDeclaration(declaration) {
var links = getNodeLinks(declaration);
if (!links.resolvedSignature) {
var classType = declaration.kind === 131 ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined;
var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined;
var parameters = [];
var hasStringLiterals = false;
var minArgumentCount = -1;
for (var i = 0, n = declaration.parameters.length; i < n; i++) {
var param = declaration.parameters[i];
parameters.push(param.symbol);
if (param.type && param.type.kind === 8) {
hasStringLiterals = true;
}
if (minArgumentCount < 0) {
if (param.initializer || param.questionToken || param.dotDotDotToken) {
minArgumentCount = i;
}
}
}
if (minArgumentCount < 0) {
minArgumentCount = declaration.parameters.length;
}
var returnType;
if (classType) {
returnType = classType;
}
else if (declaration.type) {
returnType = getTypeFromTypeNode(declaration.type);
}
else {
if (declaration.kind === 132 && !ts.hasDynamicName(declaration)) {
var setter = ts.getDeclarationOfKind(declaration.symbol, 133);
returnType = getAnnotatedAccessorType(setter);
}
if (!returnType && ts.nodeIsMissing(declaration.body)) {
returnType = anyType;
}
}
links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals);
}
return links.resolvedSignature;
}
function getSignaturesOfSymbol(symbol) {
if (!symbol)
return emptyArray;
var result = [];
for (var i = 0, len = symbol.declarations.length; i < len; i++) {
var node = symbol.declarations[i];
switch (node.kind) {
case 138:
case 139:
case 193:
case 130:
case 129:
case 131:
case 134:
case 135:
case 136:
case 132:
case 133:
case 158:
case 159:
if (i > 0 && node.body) {
var previous = symbol.declarations[i - 1];
if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) {
break;
}
}
result.push(getSignatureFromDeclaration(node));
}
}
return result;
}
function getReturnTypeOfSignature(signature) {
if (!signature.resolvedReturnType) {
signature.resolvedReturnType = resolvingType;
if (signature.target) {
var type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper);
}
else if (signature.unionSignatures) {
var type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature));
}
else {
var type = getReturnTypeFromBody(signature.declaration);
}
if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = type;
}
}
else if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = anyType;
if (compilerOptions.noImplicitAny) {
var declaration = signature.declaration;
if (declaration.name) {
error(declaration.name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(declaration.name));
}
else {
error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);
}
}
}
return signature.resolvedReturnType;
}
function getRestTypeOfSignature(signature) {
if (signature.hasRestParameter) {
var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
if (type.flags & 4096 && type.target === globalArrayType) {
return type.typeArguments[0];
}
}
return anyType;
}
function getSignatureInstantiation(signature, typeArguments) {
return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true);
}
function getErasedSignature(signature) {
if (!signature.typeParameters)
return signature;
if (!signature.erasedSignatureCache) {
if (signature.target) {
signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper);
}
else {
signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true);
}
}
return signature.erasedSignatureCache;
}
function getOrCreateTypeFromSignature(signature) {
if (!signature.isolatedSignatureType) {
var isConstructor = signature.declaration.kind === 131 || signature.declaration.kind === 135;
var type = createObjectType(32768 | 65536);
type.members = emptySymbols;
type.properties = emptyArray;
type.callSignatures = !isConstructor ? [signature] : emptyArray;
type.constructSignatures = isConstructor ? [signature] : emptyArray;
signature.isolatedSignatureType = type;
}
return signature.isolatedSignatureType;
}
function getIndexSymbol(symbol) {
return symbol.members["__index"];
}
function getIndexDeclarationOfSymbol(symbol, kind) {
var syntaxKind = kind === 1 ? 117 : 119;
var indexSymbol = getIndexSymbol(symbol);
if (indexSymbol) {
var len = indexSymbol.declarations.length;
for (var i = 0; i < len; i++) {
var node = indexSymbol.declarations[i];
if (node.parameters.length === 1) {
var parameter = node.parameters[0];
if (parameter && parameter.type && parameter.type.kind === syntaxKind) {
return node;
}
}
}
}
return undefined;
}
function getIndexTypeOfSymbol(symbol, kind) {
var declaration = getIndexDeclarationOfSymbol(symbol, kind);
return declaration ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType : undefined;
}
function getConstraintOfTypeParameter(type) {
if (!type.constraint) {
if (type.target) {
var targetConstraint = getConstraintOfTypeParameter(type.target);
type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType;
}
else {
type.constraint = getTypeFromTypeNode(ts.getDeclarationOfKind(type.symbol, 125).constraint);
}
}
return type.constraint === noConstraintType ? undefined : type.constraint;
}
function getTypeListId(types) {
switch (types.length) {
case 1:
return "" + types[0].id;
case 2:
return types[0].id + "," + types[1].id;
default:
var result = "";
for (var i = 0; i < types.length; i++) {
if (i > 0)
result += ",";
result += types[i].id;
}
return result;
}
}
function getWideningFlagsOfTypes(types) {
var result = 0;
for (var i = 0; i < types.length; i++) {
result |= types[i].flags;
}
return result & 786432;
}
function createTypeReference(target, typeArguments) {
var id = getTypeListId(typeArguments);
var type = target.instantiations[id];
if (!type) {
var flags = 4096 | getWideningFlagsOfTypes(typeArguments);
type = target.instantiations[id] = createObjectType(flags, target.symbol);
type.target = target;
type.typeArguments = typeArguments;
}
return type;
}
function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) {
var links = getNodeLinks(typeReferenceNode);
if (links.isIllegalTypeReferenceInConstraint !== undefined) {
return links.isIllegalTypeReferenceInConstraint;
}
var currentNode = typeReferenceNode;
while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) {
currentNode = currentNode.parent;
}
links.isIllegalTypeReferenceInConstraint = currentNode.kind === 125;
return links.isIllegalTypeReferenceInConstraint;
}
function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) {
var typeParameterSymbol;
function check(n) {
if (n.kind === 137 && n.typeName.kind === 64) {
var links = getNodeLinks(n);
if (links.isIllegalTypeReferenceInConstraint === undefined) {
var symbol = resolveName(typeParameter, n.typeName.text, 793056, undefined, undefined);
if (symbol && (symbol.flags & 262144)) {
links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; });
}
}
if (links.isIllegalTypeReferenceInConstraint) {
error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list);
}
}
ts.forEachChild(n, check);
}
if (typeParameter.constraint) {
typeParameterSymbol = getSymbolOfNode(typeParameter);
check(typeParameter.constraint);
}
}
function getTypeFromTypeReferenceNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var symbol = resolveEntityName(node, node.typeName, 793056);
if (symbol) {
var type;
if ((symbol.flags & 262144) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) {
type = unknownType;
}
else {
type = getDeclaredTypeOfSymbol(symbol);
if (type.flags & (1024 | 2048) && type.flags & 4096) {
var typeParameters = type.typeParameters;
if (node.typeArguments && node.typeArguments.length === typeParameters.length) {
type = createTypeReference(type, ts.map(node.typeArguments, getTypeFromTypeNode));
}
else {
error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length);
type = undefined;
}
}
else {
if (node.typeArguments) {
error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
type = undefined;
}
}
}
}
links.resolvedType = type || unknownType;
}
return links.resolvedType;
}
function getTypeFromTypeQueryNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getWidenedType(checkExpressionOrQualifiedName(node.exprName));
}
return links.resolvedType;
}
function getTypeOfGlobalSymbol(symbol, arity) {
function getTypeDeclaration(symbol) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
switch (declaration.kind) {
case 194:
case 195:
case 197:
return declaration;
}
}
}
if (!symbol) {
return emptyObjectType;
}
var type = getDeclaredTypeOfSymbol(symbol);
if (!(type.flags & 48128)) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name);
return emptyObjectType;
}
if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity);
return emptyObjectType;
}
return type;
}
function getGlobalValueSymbol(name) {
return getGlobalSymbol(name, 107455, ts.Diagnostics.Cannot_find_global_value_0);
}
function getGlobalTypeSymbol(name) {
return getGlobalSymbol(name, 793056, ts.Diagnostics.Cannot_find_global_type_0);
}
function getGlobalSymbol(name, meaning, diagnostic) {
return resolveName(undefined, name, meaning, diagnostic, name);
}
function getGlobalType(name) {
return getTypeOfGlobalSymbol(getGlobalTypeSymbol(name), 0);
}
function getGlobalESSymbolConstructorSymbol() {
return globalESSymbolConstructorSymbol || (globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol"));
}
function createArrayType(elementType) {
var arrayType = globalArrayType || getDeclaredTypeOfSymbol(globalArraySymbol);
return arrayType !== emptyObjectType ? createTypeReference(arrayType, [elementType]) : emptyObjectType;
}
function getTypeFromArrayTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
}
return links.resolvedType;
}
function createTupleType(elementTypes) {
var id = getTypeListId(elementTypes);
var type = tupleTypes[id];
if (!type) {
type = tupleTypes[id] = createObjectType(8192);
type.elementTypes = elementTypes;
}
return type;
}
function getTypeFromTupleTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode));
}
return links.resolvedType;
}
function addTypeToSortedSet(sortedSet, type) {
if (type.flags & 16384) {
addTypesToSortedSet(sortedSet, type.types);
}
else {
var i = 0;
var id = type.id;
while (i < sortedSet.length && sortedSet[i].id < id) {
i++;
}
if (i === sortedSet.length || sortedSet[i].id !== id) {
sortedSet.splice(i, 0, type);
}
}
}
function addTypesToSortedSet(sortedTypes, types) {
for (var i = 0, len = types.length; i < len; i++) {
addTypeToSortedSet(sortedTypes, types[i]);
}
}
function isSubtypeOfAny(candidate, types) {
for (var i = 0, len = types.length; i < len; i++) {
if (candidate !== types[i] && isTypeSubtypeOf(candidate, types[i])) {
return true;
}
}
return false;
}
function removeSubtypes(types) {
var i = types.length;
while (i > 0) {
i--;
if (isSubtypeOfAny(types[i], types)) {
types.splice(i, 1);
}
}
}
function containsAnyType(types) {
for (var i = 0; i < types.length; i++) {
if (types[i].flags & 1) {
return true;
}
}
return false;
}
function removeAllButLast(types, typeToRemove) {
var i = types.length;
while (i > 0 && types.length > 1) {
i--;
if (types[i] === typeToRemove) {
types.splice(i, 1);
}
}
}
function getUnionType(types, noSubtypeReduction) {
if (types.length === 0) {
return emptyObjectType;
}
var sortedTypes = [];
addTypesToSortedSet(sortedTypes, types);
if (noSubtypeReduction) {
if (containsAnyType(sortedTypes)) {
return anyType;
}
removeAllButLast(sortedTypes, undefinedType);
removeAllButLast(sortedTypes, nullType);
}
else {
removeSubtypes(sortedTypes);
}
if (sortedTypes.length === 1) {
return sortedTypes[0];
}
var id = getTypeListId(sortedTypes);
var type = unionTypes[id];
if (!type) {
type = unionTypes[id] = createObjectType(16384 | getWideningFlagsOfTypes(sortedTypes));
type.types = sortedTypes;
}
return type;
}
function getTypeFromUnionTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true);
}
return links.resolvedType;
}
function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createObjectType(32768, node.symbol);
}
return links.resolvedType;
}
function getStringLiteralType(node) {
if (ts.hasProperty(stringLiteralTypes, node.text)) {
return stringLiteralTypes[node.text];
}
var type = stringLiteralTypes[node.text] = createType(256);
type.text = ts.getTextOfNode(node);
return type;
}
function getTypeFromStringLiteral(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getStringLiteralType(node);
}
return links.resolvedType;
}
function getTypeFromTypeNode(node) {
switch (node.kind) {
case 110:
return anyType;
case 119:
return stringType;
case 117:
return numberType;
case 111:
return booleanType;
case 120:
return esSymbolType;
case 98:
return voidType;
case 8:
return getTypeFromStringLiteral(node);
case 137:
return getTypeFromTypeReferenceNode(node);
case 140:
return getTypeFromTypeQueryNode(node);
case 142:
return getTypeFromArrayTypeNode(node);
case 143:
return getTypeFromTupleTypeNode(node);
case 144:
return getTypeFromUnionTypeNode(node);
case 145:
return getTypeFromTypeNode(node.type);
case 138:
case 139:
case 141:
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
case 64:
case 123:
var symbol = getSymbolInfo(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
default:
return unknownType;
}
}
function instantiateList(items, mapper, instantiator) {
if (items && items.length) {
var result = [];
for (var i = 0; i < items.length; i++) {
result.push(instantiator(items[i], mapper));
}
return result;
}
return items;
}
function createUnaryTypeMapper(source, target) {
return function (t) { return t === source ? target : t; };
}
function createBinaryTypeMapper(source1, target1, source2, target2) {
return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; };
}
function createTypeMapper(sources, targets) {
switch (sources.length) {
case 1: return createUnaryTypeMapper(sources[0], targets[0]);
case 2: return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]);
}
return function (t) {
for (var i = 0; i < sources.length; i++) {
if (t === sources[i])
return targets[i];
}
return t;
};
}
function createUnaryTypeEraser(source) {
return function (t) { return t === source ? anyType : t; };
}
function createBinaryTypeEraser(source1, source2) {
return function (t) { return t === source1 || t === source2 ? anyType : t; };
}
function createTypeEraser(sources) {
switch (sources.length) {
case 1: return createUnaryTypeEraser(sources[0]);
case 2: return createBinaryTypeEraser(sources[0], sources[1]);
}
return function (t) {
for (var i = 0; i < sources.length; i++) {
if (t === sources[i])
return anyType;
}
return t;
};
}
function createInferenceMapper(context) {
return function (t) {
for (var i = 0; i < context.typeParameters.length; i++) {
if (t === context.typeParameters[i]) {
return getInferredType(context, i);
}
}
return t;
};
}
function identityMapper(type) {
return type;
}
function combineTypeMappers(mapper1, mapper2) {
return function (t) { return mapper2(mapper1(t)); };
}
function instantiateTypeParameter(typeParameter, mapper) {
var result = createType(512);
result.symbol = typeParameter.symbol;
if (typeParameter.constraint) {
result.constraint = instantiateType(typeParameter.constraint, mapper);
}
else {
result.target = typeParameter;
result.mapper = mapper;
}
return result;
}
function instantiateSignature(signature, mapper, eraseTypeParameters) {
if (signature.typeParameters && !eraseTypeParameters) {
var freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter);
mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper);
}
var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals);
result.target = signature;
result.mapper = mapper;
return result;
}
function instantiateSymbol(symbol, mapper) {
if (symbol.flags & 16777216) {
var links = getSymbolLinks(symbol);
symbol = links.target;
mapper = combineTypeMappers(links.mapper, mapper);
}
var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name);
result.declarations = symbol.declarations;
result.parent = symbol.parent;
result.target = symbol;
result.mapper = mapper;
if (symbol.valueDeclaration) {
result.valueDeclaration = symbol.valueDeclaration;
}
return result;
}
function instantiateAnonymousType(type, mapper) {
var result = createObjectType(32768, type.symbol);
result.properties = instantiateList(getPropertiesOfObjectType(type), mapper, instantiateSymbol);
result.members = createSymbolTable(result.properties);
result.callSignatures = instantiateList(getSignaturesOfType(type, 0), mapper, instantiateSignature);
result.constructSignatures = instantiateList(getSignaturesOfType(type, 1), mapper, instantiateSignature);
var stringIndexType = getIndexTypeOfType(type, 0);
var numberIndexType = getIndexTypeOfType(type, 1);
if (stringIndexType)
result.stringIndexType = instantiateType(stringIndexType, mapper);
if (numberIndexType)
result.numberIndexType = instantiateType(numberIndexType, mapper);
return result;
}
function instantiateType(type, mapper) {
if (mapper !== identityMapper) {
if (type.flags & 512) {
return mapper(type);
}
if (type.flags & 32768) {
return type.symbol && type.symbol.flags & (16 | 8192 | 2048 | 4096) ? instantiateAnonymousType(type, mapper) : type;
}
if (type.flags & 4096) {
return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType));
}
if (type.flags & 8192) {
return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType));
}
if (type.flags & 16384) {
return getUnionType(instantiateList(type.types, mapper, instantiateType), true);
}
}
return type;
}
function isContextSensitive(node) {
ts.Debug.assert(node.kind !== 130 || ts.isObjectLiteralMethod(node));
switch (node.kind) {
case 158:
case 159:
return isContextSensitiveFunctionLikeDeclaration(node);
case 150:
return ts.forEach(node.properties, isContextSensitive);
case 149:
return ts.forEach(node.elements, isContextSensitive);
case 166:
return isContextSensitive(node.whenTrue) ||
isContextSensitive(node.whenFalse);
case 165:
return node.operatorToken.kind === 49 &&
(isContextSensitive(node.left) || isContextSensitive(node.right));
case 207:
return isContextSensitive(node.initializer);
case 130:
case 129:
return isContextSensitiveFunctionLikeDeclaration(node);
case 157:
return isContextSensitive(node.expression);
}
return false;
}
function isContextSensitiveFunctionLikeDeclaration(node) {
return !node.typeParameters && node.parameters.length && !ts.forEach(node.parameters, function (p) { return p.type; });
}
function getTypeWithoutConstructors(type) {
if (type.flags & 48128) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (resolved.constructSignatures.length) {
var result = createObjectType(32768, type.symbol);
result.members = resolved.members;
result.properties = resolved.properties;
result.callSignatures = resolved.callSignatures;
result.constructSignatures = emptyArray;
type = result;
}
}
return type;
}
var subtypeRelation = {};
var assignableRelation = {};
var identityRelation = {};
function isTypeIdenticalTo(source, target) {
return checkTypeRelatedTo(source, target, identityRelation, undefined);
}
function compareTypes(source, target) {
return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0;
}
function isTypeSubtypeOf(source, target) {
return checkTypeSubtypeOf(source, target, undefined);
}
function isTypeAssignableTo(source, target) {
return checkTypeAssignableTo(source, target, undefined);
}
function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) {
return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain);
}
function checkTypeAssignableTo(source, target, errorNode, headMessage) {
return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage);
}
function isSignatureAssignableTo(source, target) {
var sourceType = getOrCreateTypeFromSignature(source);
var targetType = getOrCreateTypeFromSignature(target);
return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined);
}
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) {
var errorInfo;
var sourceStack;
var targetStack;
var maybeStack;
var expandingFlags;
var depth = 0;
var overflow = false;
ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
var result = isRelatedTo(source, target, errorNode !== undefined, headMessage);
if (overflow) {
error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
}
else if (errorInfo) {
if (errorInfo.next === undefined) {
errorInfo = undefined;
isRelatedTo(source, target, errorNode !== undefined, headMessage, true);
}
if (containingMessageChain) {
errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo);
}
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo));
}
return result !== 0;
function reportError(message, arg0, arg1, arg2) {
errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2);
}
function isRelatedTo(source, target, reportErrors, headMessage, elaborateErrors) {
if (elaborateErrors === void 0) { elaborateErrors = false; }
var result;
if (source === target)
return -1;
if (relation !== identityRelation) {
if (target.flags & 1)
return -1;
if (source === undefinedType)
return -1;
if (source === nullType && target !== undefinedType)
return -1;
if (source.flags & 128 && target === numberType)
return -1;
if (source.flags & 256 && target === stringType)
return -1;
if (relation === assignableRelation) {
if (source.flags & 1)
return -1;
if (source === numberType && target.flags & 128)
return -1;
}
}
if (source.flags & 16384 || target.flags & 16384) {
if (relation === identityRelation) {
if (source.flags & 16384 && target.flags & 16384) {
if (result = unionTypeRelatedToUnionType(source, target)) {
if (result &= unionTypeRelatedToUnionType(target, source)) {
return result;
}
}
}
else if (source.flags & 16384) {
if (result = unionTypeRelatedToType(source, target, reportErrors)) {
return result;
}
}
else {
if (result = unionTypeRelatedToType(target, source, reportErrors)) {
return result;
}
}
}
else {
if (source.flags & 16384) {
if (result = unionTypeRelatedToType(source, target, reportErrors)) {
return result;
}
}
else {
if (result = typeRelatedToUnionType(source, target, reportErrors)) {
return result;
}
}
}
}
else if (source.flags & 512 && target.flags & 512) {
if (result = typeParameterRelatedTo(source, target, reportErrors)) {
return result;
}
}
else {
var saveErrorInfo = errorInfo;
if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
if (result = typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) {
return result;
}
}
var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo;
var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source);
if (sourceOrApparentType.flags & 48128 && target.flags & 48128 &&
(result = objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors, elaborateErrors))) {
errorInfo = saveErrorInfo;
return result;
}
}
if (reportErrors) {
headMessage = headMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
var sourceType = typeToString(source);
var targetType = typeToString(target);
if (sourceType === targetType) {
sourceType = typeToString(source, undefined, 128);
targetType = typeToString(target, undefined, 128);
}
reportError(headMessage, sourceType, targetType);
}
return 0;
}
function unionTypeRelatedToUnionType(source, target) {
var result = -1;
var sourceTypes = source.types;
for (var i = 0, len = sourceTypes.length; i < len; i++) {
var related = typeRelatedToUnionType(sourceTypes[i], target, false);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function typeRelatedToUnionType(source, target, reportErrors) {
var targetTypes = target.types;
for (var i = 0, len = targetTypes.length; i < len; i++) {
var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1);
if (related) {
return related;
}
}
return 0;
}
function unionTypeRelatedToType(source, target, reportErrors) {
var result = -1;
var sourceTypes = source.types;
for (var i = 0, len = sourceTypes.length; i < len; i++) {
var related = isRelatedTo(sourceTypes[i], target, reportErrors);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function typesRelatedTo(sources, targets, reportErrors) {
var result = -1;
for (var i = 0, len = sources.length; i < len; i++) {
var related = isRelatedTo(sources[i], targets[i], reportErrors);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function typeParameterRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
if (source.symbol.name !== target.symbol.name) {
return 0;
}
if (source.constraint === target.constraint) {
return -1;
}
if (source.constraint === noConstraintType || target.constraint === noConstraintType) {
return 0;
}
return isRelatedTo(source.constraint, target.constraint, reportErrors);
}
else {
while (true) {
var constraint = getConstraintOfTypeParameter(source);
if (constraint === target)
return -1;
if (!(constraint && constraint.flags & 512))
break;
source = constraint;
}
return 0;
}
}
function objectTypeRelatedTo(source, target, reportErrors, elaborateErrors) {
if (elaborateErrors === void 0) { elaborateErrors = false; }
if (overflow) {
return 0;
}
var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id;
var related = relation[id];
if (related !== undefined) {
if (!elaborateErrors || (related === 3)) {
return related === 1 ? -1 : 0;
}
}
if (depth > 0) {
for (var i = 0; i < depth; i++) {
if (maybeStack[i][id]) {
return 1;
}
}
if (depth === 100) {
overflow = true;
return 0;
}
}
else {
sourceStack = [];
targetStack = [];
maybeStack = [];
expandingFlags = 0;
}
sourceStack[depth] = source;
targetStack[depth] = target;
maybeStack[depth] = {};
maybeStack[depth][id] = 1;
depth++;
var saveExpandingFlags = expandingFlags;
if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack))
expandingFlags |= 1;
if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack))
expandingFlags |= 2;
if (expandingFlags === 3) {
var result = 1;
}
else {
var result = propertiesRelatedTo(source, target, reportErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 0, reportErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 1, reportErrors);
if (result) {
result &= stringIndexTypesRelatedTo(source, target, reportErrors);
if (result) {
result &= numberIndexTypesRelatedTo(source, target, reportErrors);
}
}
}
}
}
expandingFlags = saveExpandingFlags;
depth--;
if (result) {
var maybeCache = maybeStack[depth];
var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1];
ts.copyMap(maybeCache, destinationCache);
}
else {
relation[id] = reportErrors ? 3 : 2;
}
return result;
}
function isDeeplyNestedGeneric(type, stack) {
if (type.flags & 4096 && depth >= 10) {
var target = type.target;
var count = 0;
for (var i = 0; i < depth; i++) {
var t = stack[i];
if (t.flags & 4096 && t.target === target) {
count++;
if (count >= 10)
return true;
}
}
}
return false;
}
function propertiesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return propertiesIdenticalTo(source, target);
}
var result = -1;
var properties = getPropertiesOfObjectType(target);
var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 131072);
for (var i = 0; i < properties.length; i++) {
var targetProp = properties[i];
var sourceProp = getPropertyOfType(source, targetProp.name);
if (sourceProp !== targetProp) {
if (!sourceProp) {
if (!(targetProp.flags & 536870912) || requireOptionalProperties) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source));
}
return 0;
}
}
else if (!(targetProp.flags & 134217728)) {
var sourceFlags = getDeclarationFlagsFromSymbol(sourceProp);
var targetFlags = getDeclarationFlagsFromSymbol(targetProp);
if (sourceFlags & 32 || targetFlags & 32) {
if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
if (reportErrors) {
if (sourceFlags & 32 && targetFlags & 32) {
reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp));
}
else {
reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourceFlags & 32 ? source : target), typeToString(sourceFlags & 32 ? target : source));
}
}
return 0;
}
}
else if (targetFlags & 64) {
var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32;
var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(sourceProp.parent) : undefined;
var targetClass = getDeclaredTypeOfSymbol(targetProp.parent);
if (!sourceClass || !hasBaseType(sourceClass, targetClass)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass));
}
return 0;
}
}
else if (sourceFlags & 64) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0;
}
var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
}
return 0;
}
result &= related;
if (sourceProp.flags & 536870912 && !(targetProp.flags & 536870912)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0;
}
}
}
}
return result;
}
function propertiesIdenticalTo(source, target) {
var sourceProperties = getPropertiesOfObjectType(source);
var targetProperties = getPropertiesOfObjectType(target);
if (sourceProperties.length !== targetProperties.length) {
return 0;
}
var result = -1;
for (var i = 0, len = sourceProperties.length; i < len; ++i) {
var sourceProp = sourceProperties[i];
var targetProp = getPropertyOfObjectType(target, sourceProp.name);
if (!targetProp) {
return 0;
}
var related = compareProperties(sourceProp, targetProp, isRelatedTo);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function signaturesRelatedTo(source, target, kind, reportErrors) {
if (relation === identityRelation) {
return signaturesIdenticalTo(source, target, kind);
}
if (target === anyFunctionType || source === anyFunctionType) {
return -1;
}
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
var result = -1;
var saveErrorInfo = errorInfo;
outer: for (var i = 0; i < targetSignatures.length; i++) {
var t = targetSignatures[i];
if (!t.hasStringLiterals || target.flags & 65536) {
var localErrors = reportErrors;
for (var j = 0; j < sourceSignatures.length; j++) {
var s = sourceSignatures[j];
if (!s.hasStringLiterals || source.flags & 65536) {
var related = signatureRelatedTo(s, t, localErrors);
if (related) {
result &= related;
errorInfo = saveErrorInfo;
continue outer;
}
localErrors = false;
}
}
return 0;
}
}
return result;
}
function signatureRelatedTo(source, target, reportErrors) {
if (source === target) {
return -1;
}
if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) {
return 0;
}
var sourceMax = source.parameters.length;
var targetMax = target.parameters.length;
var checkCount;
if (source.hasRestParameter && target.hasRestParameter) {
checkCount = sourceMax > targetMax ? sourceMax : targetMax;
sourceMax--;
targetMax--;
}
else if (source.hasRestParameter) {
sourceMax--;
checkCount = targetMax;
}
else if (target.hasRestParameter) {
targetMax--;
checkCount = sourceMax;
}
else {
checkCount = sourceMax < targetMax ? sourceMax : targetMax;
}
source = getErasedSignature(source);
target = getErasedSignature(target);
var result = -1;
for (var i = 0; i < checkCount; i++) {
var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
var saveErrorInfo = errorInfo;
var related = isRelatedTo(s, t, reportErrors);
if (!related) {
related = isRelatedTo(t, s, false);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name);
}
return 0;
}
errorInfo = saveErrorInfo;
}
result &= related;
}
var t = getReturnTypeOfSignature(target);
if (t === voidType)
return result;
var s = getReturnTypeOfSignature(source);
return result & isRelatedTo(s, t, reportErrors);
}
function signaturesIdenticalTo(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
if (sourceSignatures.length !== targetSignatures.length) {
return 0;
}
var result = -1;
for (var i = 0, len = sourceSignatures.length; i < len; ++i) {
var related = compareSignatures(sourceSignatures[i], targetSignatures[i], true, isRelatedTo);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function stringIndexTypesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return indexTypesIdenticalTo(0, source, target);
}
var targetType = getIndexTypeOfType(target, 0);
if (targetType) {
var sourceType = getIndexTypeOfType(source, 0);
if (!sourceType) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
}
return 0;
}
var related = isRelatedTo(sourceType, targetType, reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signatures_are_incompatible);
}
return 0;
}
return related;
}
return -1;
}
function numberIndexTypesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return indexTypesIdenticalTo(1, source, target);
}
var targetType = getIndexTypeOfType(target, 1);
if (targetType) {
var sourceStringType = getIndexTypeOfType(source, 0);
var sourceNumberType = getIndexTypeOfType(source, 1);
if (!(sourceStringType || sourceNumberType)) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
}
return 0;
}
if (sourceStringType && sourceNumberType) {
var related = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors);
}
else {
var related = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors);
}
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Index_signatures_are_incompatible);
}
return 0;
}
return related;
}
return -1;
}
function indexTypesIdenticalTo(indexKind, source, target) {
var targetType = getIndexTypeOfType(target, indexKind);
var sourceType = getIndexTypeOfType(source, indexKind);
if (!sourceType && !targetType) {
return -1;
}
if (sourceType && targetType) {
return isRelatedTo(sourceType, targetType);
}
return 0;
}
}
function isPropertyIdenticalTo(sourceProp, targetProp) {
return compareProperties(sourceProp, targetProp, compareTypes) !== 0;
}
function compareProperties(sourceProp, targetProp, compareTypes) {
if (sourceProp === targetProp) {
return -1;
}
var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (32 | 64);
var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (32 | 64);
if (sourcePropAccessibility !== targetPropAccessibility) {
return 0;
}
if (sourcePropAccessibility) {
if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) {
return 0;
}
}
else {
if ((sourceProp.flags & 536870912) !== (targetProp.flags & 536870912)) {
return 0;
}
}
return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
function compareSignatures(source, target, compareReturnTypes, compareTypes) {
if (source === target) {
return -1;
}
if (source.parameters.length !== target.parameters.length ||
source.minArgumentCount !== target.minArgumentCount ||
source.hasRestParameter !== target.hasRestParameter) {
return 0;
}
var result = -1;
if (source.typeParameters && target.typeParameters) {
if (source.typeParameters.length !== target.typeParameters.length) {
return 0;
}
for (var i = 0, len = source.typeParameters.length; i < len; ++i) {
var related = compareTypes(source.typeParameters[i], target.typeParameters[i]);
if (!related) {
return 0;
}
result &= related;
}
}
else if (source.typeParameters || target.typeParameters) {
return 0;
}
source = getErasedSignature(source);
target = getErasedSignature(target);
for (var i = 0, len = source.parameters.length; i < len; i++) {
var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]);
var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]);
var related = compareTypes(s, t);
if (!related) {
return 0;
}
result &= related;
}
if (compareReturnTypes) {
result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
return result;
}
function isSupertypeOfEach(candidate, types) {
for (var i = 0, len = types.length; i < len; i++) {
if (candidate !== types[i] && !isTypeSubtypeOf(types[i], candidate))
return false;
}
return true;
}
function getCommonSupertype(types) {
return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; });
}
function reportNoCommonSupertypeError(types, errorLocation, errorMessageChainHead) {
var bestSupertype;
var bestSupertypeDownfallType;
var bestSupertypeScore = 0;
for (var i = 0; i < types.length; i++) {
var score = 0;
var downfallType = undefined;
for (var j = 0; j < types.length; j++) {
if (isTypeSubtypeOf(types[j], types[i])) {
score++;
}
else if (!downfallType) {
downfallType = types[j];
}
}
if (score > bestSupertypeScore) {
bestSupertype = types[i];
bestSupertypeDownfallType = downfallType;
bestSupertypeScore = score;
}
if (bestSupertypeScore === types.length - 1) {
break;
}
}
checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead);
}
function isArrayType(type) {
return type.flags & 4096 && type.target === globalArrayType;
}
function isTupleLikeType(type) {
return !!getPropertyOfType(type, "0");
}
function getWidenedTypeOfObjectLiteral(type) {
var properties = getPropertiesOfObjectType(type);
var members = {};
ts.forEach(properties, function (p) {
var propType = getTypeOfSymbol(p);
var widenedType = getWidenedType(propType);
if (propType !== widenedType) {
var symbol = createSymbol(p.flags | 67108864, p.name);
symbol.declarations = p.declarations;
symbol.parent = p.parent;
symbol.type = widenedType;
symbol.target = p;
if (p.valueDeclaration)
symbol.valueDeclaration = p.valueDeclaration;
p = symbol;
}
members[p.name] = p;
});
var stringIndexType = getIndexTypeOfType(type, 0);
var numberIndexType = getIndexTypeOfType(type, 1);
if (stringIndexType)
stringIndexType = getWidenedType(stringIndexType);
if (numberIndexType)
numberIndexType = getWidenedType(numberIndexType);
return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType);
}
function getWidenedType(type) {
if (type.flags & 786432) {
if (type.flags & (32 | 64)) {
return anyType;
}
if (type.flags & 131072) {
return getWidenedTypeOfObjectLiteral(type);
}
if (type.flags & 16384) {
return getUnionType(ts.map(type.types, getWidenedType));
}
if (isArrayType(type)) {
return createArrayType(getWidenedType(type.typeArguments[0]));
}
}
return type;
}
function reportWideningErrorsInType(type) {
if (type.flags & 16384) {
var errorReported = false;
ts.forEach(type.types, function (t) {
if (reportWideningErrorsInType(t)) {
errorReported = true;
}
});
return errorReported;
}
if (isArrayType(type)) {
return reportWideningErrorsInType(type.typeArguments[0]);
}
if (type.flags & 131072) {
var errorReported = false;
ts.forEach(getPropertiesOfObjectType(type), function (p) {
var t = getTypeOfSymbol(p);
if (t.flags & 262144) {
if (!reportWideningErrorsInType(t)) {
error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(getWidenedType(t)));
}
errorReported = true;
}
});
return errorReported;
}
return false;
}
function reportImplicitAnyError(declaration, type) {
var typeAsString = typeToString(getWidenedType(type));
switch (declaration.kind) {
case 128:
case 127:
var diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
break;
case 126:
var diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
break;
case 193:
case 130:
case 129:
case 132:
case 133:
case 158:
case 159:
if (!declaration.name) {
error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
return;
}
var diagnostic = ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
break;
default:
var diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type;
}
error(declaration, diagnostic, ts.declarationNameToString(declaration.name), typeAsString);
}
function reportErrorsFromWidening(declaration, type) {
if (produceDiagnostics && compilerOptions.noImplicitAny && type.flags & 262144) {
if (!reportWideningErrorsInType(type)) {
reportImplicitAnyError(declaration, type);
}
}
}
function forEachMatchingParameterType(source, target, callback) {
var sourceMax = source.parameters.length;
var targetMax = target.parameters.length;
var count;
if (source.hasRestParameter && target.hasRestParameter) {
count = sourceMax > targetMax ? sourceMax : targetMax;
sourceMax--;
targetMax--;
}
else if (source.hasRestParameter) {
sourceMax--;
count = targetMax;
}
else if (target.hasRestParameter) {
targetMax--;
count = sourceMax;
}
else {
count = sourceMax < targetMax ? sourceMax : targetMax;
}
for (var i = 0; i < count; i++) {
var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source);
var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target);
callback(s, t);
}
}
function createInferenceContext(typeParameters, inferUnionTypes) {
var inferences = [];
for (var i = 0; i < typeParameters.length; i++) {
inferences.push({ primary: undefined, secondary: undefined });
}
return {
typeParameters: typeParameters,
inferUnionTypes: inferUnionTypes,
inferenceCount: 0,
inferences: inferences,
inferredTypes: new Array(typeParameters.length)
};
}
function inferTypes(context, source, target) {
var sourceStack;
var targetStack;
var depth = 0;
var inferiority = 0;
inferFromTypes(source, target);
function isInProcess(source, target) {
for (var i = 0; i < depth; i++) {
if (source === sourceStack[i] && target === targetStack[i])
return true;
}
return false;
}
function isWithinDepthLimit(type, stack) {
if (depth >= 5) {
var target = type.target;
var count = 0;
for (var i = 0; i < depth; i++) {
var t = stack[i];
if (t.flags & 4096 && t.target === target)
count++;
}
return count < 5;
}
return true;
}
function inferFromTypes(source, target) {
if (source === anyFunctionType) {
return;
}
if (target.flags & 512) {
var typeParameters = context.typeParameters;
for (var i = 0; i < typeParameters.length; i++) {
if (target === typeParameters[i]) {
var inferences = context.inferences[i];
var candidates = inferiority ? inferences.secondary || (inferences.secondary = []) : inferences.primary || (inferences.primary = []);
if (!ts.contains(candidates, source))
candidates.push(source);
break;
}
}
}
else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) {
var sourceTypes = source.typeArguments;
var targetTypes = target.typeArguments;
for (var i = 0; i < sourceTypes.length; i++) {
inferFromTypes(sourceTypes[i], targetTypes[i]);
}
}
else if (target.flags & 16384) {
var targetTypes = target.types;
var typeParameterCount = 0;
var typeParameter;
for (var i = 0; i < targetTypes.length; i++) {
var t = targetTypes[i];
if (t.flags & 512 && ts.contains(context.typeParameters, t)) {
typeParameter = t;
typeParameterCount++;
}
else {
inferFromTypes(source, t);
}
}
if (typeParameterCount === 1) {
inferiority++;
inferFromTypes(source, typeParameter);
inferiority--;
}
}
else if (source.flags & 16384) {
var sourceTypes = source.types;
for (var i = 0; i < sourceTypes.length; i++) {
inferFromTypes(sourceTypes[i], target);
}
}
else if (source.flags & 48128 && (target.flags & (4096 | 8192) ||
(target.flags & 32768) && target.symbol && target.symbol.flags & (8192 | 2048))) {
if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) {
if (depth === 0) {
sourceStack = [];
targetStack = [];
}
sourceStack[depth] = source;
targetStack[depth] = target;
depth++;
inferFromProperties(source, target);
inferFromSignatures(source, target, 0);
inferFromSignatures(source, target, 1);
inferFromIndexTypes(source, target, 0, 0);
inferFromIndexTypes(source, target, 1, 1);
inferFromIndexTypes(source, target, 0, 1);
depth--;
}
}
}
function inferFromProperties(source, target) {
var properties = getPropertiesOfObjectType(target);
for (var i = 0; i < properties.length; i++) {
var targetProp = properties[i];
var sourceProp = getPropertyOfObjectType(source, targetProp.name);
if (sourceProp) {
inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
}
}
function inferFromSignatures(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
var sourceLen = sourceSignatures.length;
var targetLen = targetSignatures.length;
var len = sourceLen < targetLen ? sourceLen : targetLen;
for (var i = 0; i < len; i++) {
inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
}
}
function inferFromSignature(source, target) {
forEachMatchingParameterType(source, target, inferFromTypes);
inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
function inferFromIndexTypes(source, target, sourceKind, targetKind) {
var targetIndexType = getIndexTypeOfType(target, targetKind);
if (targetIndexType) {
var sourceIndexType = getIndexTypeOfType(source, sourceKind);
if (sourceIndexType) {
inferFromTypes(sourceIndexType, targetIndexType);
}
}
}
}
function getInferenceCandidates(context, index) {
var inferences = context.inferences[index];
return inferences.primary || inferences.secondary || emptyArray;
}
function getInferredType(context, index) {
var inferredType = context.inferredTypes[index];
if (!inferredType) {
var inferences = getInferenceCandidates(context, index);
if (inferences.length) {
var unionOrSuperType = context.inferUnionTypes ? getUnionType(inferences) : getCommonSupertype(inferences);
inferredType = unionOrSuperType ? getWidenedType(unionOrSuperType) : inferenceFailureType;
}
else {
inferredType = emptyObjectType;
}
if (inferredType !== inferenceFailureType) {
var constraint = getConstraintOfTypeParameter(context.typeParameters[index]);
inferredType = constraint && !isTypeAssignableTo(inferredType, constraint) ? constraint : inferredType;
}
context.inferredTypes[index] = inferredType;
}
return inferredType;
}
function getInferredTypes(context) {
for (var i = 0; i < context.inferredTypes.length; i++) {
getInferredType(context, i);
}
return context.inferredTypes;
}
function hasAncestor(node, kind) {
return ts.getAncestor(node, kind) !== undefined;
}
function getResolvedSymbol(node) {
var links = getNodeLinks(node);
if (!links.resolvedSymbol) {
links.resolvedSymbol = (ts.getFullWidth(node) > 0 && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node)) || unknownSymbol;
}
return links.resolvedSymbol;
}
function isInTypeQuery(node) {
while (node) {
switch (node.kind) {
case 140:
return true;
case 64:
case 123:
node = node.parent;
continue;
default:
return false;
}
}
ts.Debug.fail("should not get here");
}
function removeTypesFromUnionType(type, typeKind, isOfTypeKind) {
if (type.flags & 16384) {
var types = type.types;
if (ts.forEach(types, function (t) { return !!(t.flags & typeKind) === isOfTypeKind; })) {
var narrowedType = getUnionType(ts.filter(types, function (t) { return !(t.flags & typeKind) === isOfTypeKind; }));
if (narrowedType !== emptyObjectType) {
return narrowedType;
}
}
}
return type;
}
function hasInitializer(node) {
return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent));
}
function isVariableAssignedWithin(symbol, node) {
var links = getNodeLinks(node);
if (links.assignmentChecks) {
var cachedResult = links.assignmentChecks[symbol.id];
if (cachedResult !== undefined) {
return cachedResult;
}
}
else {
links.assignmentChecks = {};
}
return links.assignmentChecks[symbol.id] = isAssignedIn(node);
function isAssignedInBinaryExpression(node) {
if (node.operatorToken.kind >= 52 && node.operatorToken.kind <= 63) {
var n = node.left;
while (n.kind === 157) {
n = n.expression;
}
if (n.kind === 64 && getResolvedSymbol(n) === symbol) {
return true;
}
}
return ts.forEachChild(node, isAssignedIn);
}
function isAssignedInVariableDeclaration(node) {
if (!ts.isBindingPattern(node.name) && getSymbolOfNode(node) === symbol && hasInitializer(node)) {
return true;
}
return ts.forEachChild(node, isAssignedIn);
}
function isAssignedIn(node) {
switch (node.kind) {
case 165:
return isAssignedInBinaryExpression(node);
case 191:
case 148:
return isAssignedInVariableDeclaration(node);
case 146:
case 147:
case 149:
case 150:
case 151:
case 152:
case 153:
case 154:
case 156:
case 157:
case 163:
case 160:
case 161:
case 162:
case 164:
case 166:
case 169:
case 172:
case 173:
case 175:
case 176:
case 177:
case 178:
case 179:
case 180:
case 181:
case 184:
case 185:
case 186:
case 203:
case 204:
case 187:
case 188:
case 189:
case 206:
return ts.forEachChild(node, isAssignedIn);
}
return false;
}
}
function resolveLocation(node) {
var containerNodes = [];
for (var parent = node.parent; parent; parent = parent.parent) {
if ((ts.isExpression(parent) || ts.isObjectLiteralMethod(node)) &&
isContextSensitive(parent)) {
containerNodes.unshift(parent);
}
}
ts.forEach(containerNodes, function (node) {
getTypeOfNode(node);
});
}
function getSymbolAtLocation(node) {
resolveLocation(node);
return getSymbolInfo(node);
}
function getTypeAtLocation(node) {
resolveLocation(node);
return getTypeOfNode(node);
}
function getTypeOfSymbolAtLocation(symbol, node) {
resolveLocation(node);
return getNarrowedTypeOfSymbol(symbol, node);
}
function getNarrowedTypeOfSymbol(symbol, node) {
var type = getTypeOfSymbol(symbol);
if (node && symbol.flags & 3 && type.flags & (1 | 48128 | 16384 | 512)) {
loop: while (node.parent) {
var child = node;
node = node.parent;
var narrowedType = type;
switch (node.kind) {
case 176:
if (child !== node.expression) {
narrowedType = narrowType(type, node.expression, child === node.thenStatement);
}
break;
case 166:
if (child !== node.condition) {
narrowedType = narrowType(type, node.condition, child === node.whenTrue);
}
break;
case 165:
if (child === node.right) {
if (node.operatorToken.kind === 48) {
narrowedType = narrowType(type, node.left, true);
}
else if (node.operatorToken.kind === 49) {
narrowedType = narrowType(type, node.left, false);
}
}
break;
case 210:
case 198:
case 193:
case 130:
case 129:
case 132:
case 133:
case 131:
break loop;
}
if (narrowedType !== type) {
if (isVariableAssignedWithin(symbol, node)) {
break;
}
type = narrowedType;
}
}
}
return type;
function narrowTypeByEquality(type, expr, assumeTrue) {
if (expr.left.kind !== 161 || expr.right.kind !== 8) {
return type;
}
var left = expr.left;
var right = expr.right;
if (left.expression.kind !== 64 || getResolvedSymbol(left.expression) !== symbol) {
return type;
}
var typeInfo = primitiveTypeInfo[right.text];
if (expr.operatorToken.kind === 31) {
assumeTrue = !assumeTrue;
}
if (assumeTrue) {
if (!typeInfo) {
return removeTypesFromUnionType(type, 258 | 132 | 8 | 1048576, true);
}
if (isTypeSubtypeOf(typeInfo.type, type)) {
return typeInfo.type;
}
return removeTypesFromUnionType(type, typeInfo.flags, false);
}
else {
if (typeInfo) {
return removeTypesFromUnionType(type, typeInfo.flags, true);
}
return type;
}
}
function narrowTypeByAnd(type, expr, assumeTrue) {
if (assumeTrue) {
return narrowType(narrowType(type, expr.left, true), expr.right, true);
}
else {
return getUnionType([
narrowType(type, expr.left, false),
narrowType(narrowType(type, expr.left, true), expr.right, false)
]);
}
}
function narrowTypeByOr(type, expr, assumeTrue) {
if (assumeTrue) {
return getUnionType([
narrowType(type, expr.left, true),
narrowType(narrowType(type, expr.left, false), expr.right, true)
]);
}
else {
return narrowType(narrowType(type, expr.left, false), expr.right, false);
}
}
function narrowTypeByInstanceof(type, expr, assumeTrue) {
if (type.flags & 1 || !assumeTrue || expr.left.kind !== 64 || getResolvedSymbol(expr.left) !== symbol) {
return type;
}
var rightType = checkExpression(expr.right);
if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
return type;
}
var prototypeProperty = getPropertyOfType(rightType, "prototype");
if (!prototypeProperty) {
return type;
}
var targetType = getTypeOfSymbol(prototypeProperty);
if (isTypeSubtypeOf(targetType, type)) {
return targetType;
}
if (type.flags & 16384) {
return getUnionType(ts.filter(type.types, function (t) { return isTypeSubtypeOf(t, targetType); }));
}
return type;
}
function narrowType(type, expr, assumeTrue) {
switch (expr.kind) {
case 157:
return narrowType(type, expr.expression, assumeTrue);
case 165:
var operator = expr.operatorToken.kind;
if (operator === 30 || operator === 31) {
return narrowTypeByEquality(type, expr, assumeTrue);
}
else if (operator === 48) {
return narrowTypeByAnd(type, expr, assumeTrue);
}
else if (operator === 49) {
return narrowTypeByOr(type, expr, assumeTrue);
}
else if (operator === 86) {
return narrowTypeByInstanceof(type, expr, assumeTrue);
}
break;
case 163:
if (expr.operator === 46) {
return narrowType(type, expr.operand, !assumeTrue);
}
break;
}
return type;
}
}
function markLinkedImportsAsReferenced(node) {
var nodeLinks = getNodeLinks(node);
while (nodeLinks.importOnRightSide) {
var rightSide = nodeLinks.importOnRightSide;
nodeLinks.importOnRightSide = undefined;
getSymbolLinks(rightSide).referenced = true;
ts.Debug.assert((rightSide.flags & 8388608) !== 0);
nodeLinks = getNodeLinks(ts.getDeclarationOfKind(rightSide, 200));
}
}
function checkIdentifier(node) {
var symbol = getResolvedSymbol(node);
if (symbol === argumentsSymbol && ts.getContainingFunction(node).kind === 159) {
error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_Consider_using_a_standard_function_expression);
}
if (symbol.flags & 8388608) {
var symbolLinks = getSymbolLinks(symbol);
if (!symbolLinks.referenced) {
var importOrExportAssignment = getLeftSideOfImportOrExportAssignment(node);
if (!importOrExportAssignment ||
(importOrExportAssignment.flags & 1) ||
(importOrExportAssignment.kind === 201)) {
symbolLinks.referenced = !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveImport(symbol));
}
else {
var nodeLinks = getNodeLinks(importOrExportAssignment);
ts.Debug.assert(!nodeLinks.importOnRightSide);
nodeLinks.importOnRightSide = symbol;
}
}
if (symbolLinks.referenced) {
markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 200));
}
}
checkCollisionWithCapturedSuperVariable(node, node);
checkCollisionWithCapturedThisVariable(node, node);
return getNarrowedTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol), node);
}
function captureLexicalThis(node, container) {
var classNode = container.parent && container.parent.kind === 194 ? container.parent : undefined;
getNodeLinks(node).flags |= 2;
if (container.kind === 128 || container.kind === 131) {
getNodeLinks(classNode).flags |= 4;
}
else {
getNodeLinks(container).flags |= 4;
}
}
function checkThisExpression(node) {
var container = ts.getThisContainer(node, true);
var needToCaptureLexicalThis = false;
if (container.kind === 159) {
container = ts.getThisContainer(container, false);
needToCaptureLexicalThis = (languageVersion < 2);
}
switch (container.kind) {
case 198:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body);
break;
case 197:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
break;
case 131:
if (isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
}
break;
case 128:
case 127:
if (container.flags & 128) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
}
break;
case 124:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
break;
}
if (needToCaptureLexicalThis) {
captureLexicalThis(node, container);
}
var classNode = container.parent && container.parent.kind === 194 ? container.parent : undefined;
if (classNode) {
var symbol = getSymbolOfNode(classNode);
return container.flags & 128 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol);
}
return anyType;
}
function isInConstructorArgumentInitializer(node, constructorDecl) {
for (var n = node; n && n !== constructorDecl; n = n.parent) {
if (n.kind === 126) {
return true;
}
}
return false;
}
function checkSuperExpression(node) {
var isCallExpression = node.parent.kind === 153 && node.parent.expression === node;
var enclosingClass = ts.getAncestor(node, 194);
var baseClass;
if (enclosingClass && ts.getClassBaseTypeNode(enclosingClass)) {
var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass));
baseClass = classType.baseTypes.length && classType.baseTypes[0];
}
if (!baseClass) {
error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
return unknownType;
}
var container = ts.getSuperContainer(node, true);
if (container) {
var canUseSuperExpression = false;
if (isCallExpression) {
canUseSuperExpression = container.kind === 131;
}
else {
var needToCaptureLexicalThis = false;
while (container && container.kind === 159) {
container = ts.getSuperContainer(container, true);
needToCaptureLexicalThis = true;
}
if (container && container.parent && container.parent.kind === 194) {
if (container.flags & 128) {
canUseSuperExpression =
container.kind === 130 ||
container.kind === 129 ||
container.kind === 132 ||
container.kind === 133;
}
else {
canUseSuperExpression =
container.kind === 130 ||
container.kind === 129 ||
container.kind === 132 ||
container.kind === 133 ||
container.kind === 128 ||
container.kind === 127 ||
container.kind === 131;
}
}
}
if (canUseSuperExpression) {
var returnType;
if ((container.flags & 128) || isCallExpression) {
getNodeLinks(node).flags |= 32;
returnType = getTypeOfSymbol(baseClass.symbol);
}
else {
getNodeLinks(node).flags |= 16;
returnType = baseClass;
}
if (container.kind === 131 && isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
returnType = unknownType;
}
if (!isCallExpression && needToCaptureLexicalThis) {
captureLexicalThis(node.parent, container);
}
return returnType;
}
}
if (container.kind === 124) {
error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
}
else if (isCallExpression) {
error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
}
else {
error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class);
}
return unknownType;
}
function getContextuallyTypedParameterType(parameter) {
if (isFunctionExpressionOrArrowFunction(parameter.parent)) {
var func = parameter.parent;
if (isContextSensitive(func)) {
var contextualSignature = getContextualSignature(func);
if (contextualSignature) {
var funcHasRestParameters = ts.hasRestParameters(func);
var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
var indexOfParameter = ts.indexOf(func.parameters, parameter);
if (indexOfParameter < len) {
return getTypeAtPosition(contextualSignature, indexOfParameter);
}
if (indexOfParameter === (func.parameters.length - 1) &&
funcHasRestParameters && contextualSignature.hasRestParameter && func.parameters.length >= contextualSignature.parameters.length) {
return getTypeOfSymbol(contextualSignature.parameters[contextualSignature.parameters.length - 1]);
}
}
}
}
return undefined;
}
function getContextualTypeForInitializerExpression(node) {
var declaration = node.parent;
if (node === declaration.initializer) {
if (declaration.type) {
return getTypeFromTypeNode(declaration.type);
}
if (declaration.kind === 126) {
var type = getContextuallyTypedParameterType(declaration);
if (type) {
return type;
}
}
if (ts.isBindingPattern(declaration.name)) {
return getTypeFromBindingPattern(declaration.name);
}
}
return undefined;
}
function getContextualTypeForReturnExpression(node) {
var func = ts.getContainingFunction(node);
if (func) {
if (func.type || func.kind === 131 || func.kind === 132 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(func.symbol, 133))) {
return getReturnTypeOfSignature(getSignatureFromDeclaration(func));
}
var signature = getContextualSignatureForFunctionLikeDeclaration(func);
if (signature) {
return getReturnTypeOfSignature(signature);
}
}
return undefined;
}
function getContextualTypeForArgument(callTarget, arg) {
var args = getEffectiveCallArguments(callTarget);
var argIndex = ts.indexOf(args, arg);
if (argIndex >= 0) {
var signature = getResolvedSignature(callTarget);
return getTypeAtPosition(signature, argIndex);
}
return undefined;
}
function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
if (template.parent.kind === 155) {
return getContextualTypeForArgument(template.parent, substitutionExpression);
}
return undefined;
}
function getContextualTypeForBinaryOperand(node) {
var binaryExpression = node.parent;
var operator = binaryExpression.operatorToken.kind;
if (operator >= 52 && operator <= 63) {
if (node === binaryExpression.right) {
return checkExpression(binaryExpression.left);
}
}
else if (operator === 49) {
var type = getContextualType(binaryExpression);
if (!type && node === binaryExpression.right) {
type = checkExpression(binaryExpression.left);
}
return type;
}
return undefined;
}
function applyToContextualType(type, mapper) {
if (!(type.flags & 16384)) {
return mapper(type);
}
var types = type.types;
var mappedType;
var mappedTypes;
for (var i = 0; i < types.length; i++) {
var t = mapper(types[i]);
if (t) {
if (!mappedType) {
mappedType = t;
}
else if (!mappedTypes) {
mappedTypes = [mappedType, t];
}
else {
mappedTypes.push(t);
}
}
}
return mappedTypes ? getUnionType(mappedTypes) : mappedType;
}
function getTypeOfPropertyOfContextualType(type, name) {
return applyToContextualType(type, function (t) {
var prop = getPropertyOfObjectType(t, name);
return prop ? getTypeOfSymbol(prop) : undefined;
});
}
function getIndexTypeOfContextualType(type, kind) {
return applyToContextualType(type, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); });
}
function contextualTypeIsTupleLikeType(type) {
return !!(type.flags & 16384 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type));
}
function contextualTypeHasIndexSignature(type, kind) {
return !!(type.flags & 16384 ? ts.forEach(type.types, function (t) { return getIndexTypeOfObjectOrUnionType(t, kind); }) : getIndexTypeOfObjectOrUnionType(type, kind));
}
function getContextualTypeForObjectLiteralMethod(node) {
ts.Debug.assert(ts.isObjectLiteralMethod(node));
if (isInsideWithStatementBody(node)) {
return undefined;
}
return getContextualTypeForObjectLiteralElement(node);
}
function getContextualTypeForObjectLiteralElement(element) {
var objectLiteral = element.parent;
var type = getContextualType(objectLiteral);
if (type) {
if (!ts.hasDynamicName(element)) {
var symbolName = getSymbolOfNode(element).name;
var propertyType = getTypeOfPropertyOfContextualType(type, symbolName);
if (propertyType) {
return propertyType;
}
}
return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) ||
getIndexTypeOfContextualType(type, 0);
}
return undefined;
}
function getContextualTypeForElementExpression(node) {
var arrayLiteral = node.parent;
var type = getContextualType(arrayLiteral);
if (type) {
var index = ts.indexOf(arrayLiteral.elements, node);
return getTypeOfPropertyOfContextualType(type, "" + index) || getIndexTypeOfContextualType(type, 1);
}
return undefined;
}
function getContextualTypeForConditionalOperand(node) {
var conditional = node.parent;
return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
}
function getContextualType(node) {
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (node.contextualType) {
return node.contextualType;
}
var parent = node.parent;
switch (parent.kind) {
case 191:
case 126:
case 128:
case 127:
case 148:
return getContextualTypeForInitializerExpression(node);
case 159:
case 184:
return getContextualTypeForReturnExpression(node);
case 153:
case 154:
return getContextualTypeForArgument(parent, node);
case 156:
return getTypeFromTypeNode(parent.type);
case 165:
return getContextualTypeForBinaryOperand(node);
case 207:
return getContextualTypeForObjectLiteralElement(parent);
case 149:
return getContextualTypeForElementExpression(node);
case 166:
return getContextualTypeForConditionalOperand(node);
case 171:
ts.Debug.assert(parent.parent.kind === 167);
return getContextualTypeForSubstitutionExpression(parent.parent, node);
case 157:
return getContextualType(parent);
}
return undefined;
}
function getNonGenericSignature(type) {
var signatures = getSignaturesOfObjectOrUnionType(type, 0);
if (signatures.length === 1) {
var signature = signatures[0];
if (!signature.typeParameters) {
return signature;
}
}
}
function isFunctionExpressionOrArrowFunction(node) {
return node.kind === 158 || node.kind === 159;
}
function getContextualSignatureForFunctionLikeDeclaration(node) {
return isFunctionExpressionOrArrowFunction(node) ? getContextualSignature(node) : undefined;
}
function getContextualSignature(node) {
ts.Debug.assert(node.kind !== 130 || ts.isObjectLiteralMethod(node));
var type = ts.isObjectLiteralMethod(node) ? getContextualTypeForObjectLiteralMethod(node) : getContextualType(node);
if (!type) {
return undefined;
}
if (!(type.flags & 16384)) {
return getNonGenericSignature(type);
}
var signatureList;
var types = type.types;
for (var i = 0; i < types.length; i++) {
if (signatureList &&
getSignaturesOfObjectOrUnionType(types[i], 0).length > 1) {
return undefined;
}
var signature = getNonGenericSignature(types[i]);
if (signature) {
if (!signatureList) {
signatureList = [signature];
}
else if (!compareSignatures(signatureList[0], signature, false, compareTypes)) {
return undefined;
}
else {
signatureList.push(signature);
}
}
}
var result;
if (signatureList) {
result = cloneSignature(signatureList[0]);
result.resolvedReturnType = undefined;
result.unionSignatures = signatureList;
}
return result;
}
function isInferentialContext(mapper) {
return mapper && mapper !== identityMapper;
}
function isAssignmentTarget(node) {
var parent = node.parent;
if (parent.kind === 165 && parent.operatorToken.kind === 52 && parent.left === node) {
return true;
}
if (parent.kind === 207) {
return isAssignmentTarget(parent.parent);
}
if (parent.kind === 149) {
return isAssignmentTarget(parent);
}
return false;
}
function checkSpreadElementExpression(node, contextualMapper) {
var type = checkExpressionCached(node.expression, contextualMapper);
if (!isTypeAssignableTo(type, anyArrayType)) {
error(node.expression, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(type));
return unknownType;
}
return type;
}
function checkArrayLiteral(node, contextualMapper) {
var elements = node.elements;
if (!elements.length) {
return createArrayType(undefinedType);
}
var hasSpreadElement = false;
var elementTypes = [];
ts.forEach(elements, function (e) {
var type = checkExpression(e, contextualMapper);
if (e.kind === 169) {
elementTypes.push(getIndexTypeOfType(type, 1) || anyType);
hasSpreadElement = true;
}
else {
elementTypes.push(type);
}
});
if (!hasSpreadElement) {
var contextualType = getContextualType(node);
if (contextualType && contextualTypeIsTupleLikeType(contextualType) || isAssignmentTarget(node)) {
return createTupleType(elementTypes);
}
}
return createArrayType(getUnionType(elementTypes));
}
function isNumericName(name) {
return name.kind === 124 ? isNumericComputedName(name) : isNumericLiteralName(name.text);
}
function isNumericComputedName(name) {
return allConstituentTypesHaveKind(checkComputedPropertyName(name), 1 | 132);
}
function isNumericLiteralName(name) {
return (+name).toString() === name;
}
function checkComputedPropertyName(node) {
var links = getNodeLinks(node.expression);
if (!links.resolvedType) {
links.resolvedType = checkExpression(node.expression);
if (!allConstituentTypesHaveKind(links.resolvedType, 1 | 132 | 258 | 1048576)) {
error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
}
else {
checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, true);
}
}
return links.resolvedType;
}
function checkObjectLiteral(node, contextualMapper) {
checkGrammarObjectLiteralExpression(node);
var propertiesTable = {};
var propertiesArray = [];
var contextualType = getContextualType(node);
var typeFlags;
for (var i = 0; i < node.properties.length; i++) {
var memberDecl = node.properties[i];
var member = memberDecl.symbol;
if (memberDecl.kind === 207 ||
memberDecl.kind === 208 ||
ts.isObjectLiteralMethod(memberDecl)) {
if (memberDecl.kind === 207) {
var type = checkPropertyAssignment(memberDecl, contextualMapper);
}
else if (memberDecl.kind === 130) {
var type = checkObjectLiteralMethod(memberDecl, contextualMapper);
}
else {
ts.Debug.assert(memberDecl.kind === 208);
var type = memberDecl.name.kind === 124 ? unknownType : checkExpression(memberDecl.name, contextualMapper);
}
typeFlags |= type.flags;
var prop = createSymbol(4 | 67108864 | member.flags, member.name);
prop.declarations = member.declarations;
prop.parent = member.parent;
if (member.valueDeclaration) {
prop.valueDeclaration = member.valueDeclaration;
}
prop.type = type;
prop.target = member;
member = prop;
}
else {
ts.Debug.assert(memberDecl.kind === 132 || memberDecl.kind === 133);
checkAccessorDeclaration(memberDecl);
}
if (!ts.hasDynamicName(memberDecl)) {
propertiesTable[member.name] = member;
}
propertiesArray.push(member);
}
var stringIndexType = getIndexType(0);
var numberIndexType = getIndexType(1);
var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexType, numberIndexType);
result.flags |= 131072 | 524288 | (typeFlags & 262144);
return result;
function getIndexType(kind) {
if (contextualType && contextualTypeHasIndexSignature(contextualType, kind)) {
var propTypes = [];
for (var i = 0; i < propertiesArray.length; i++) {
var propertyDecl = node.properties[i];
if (kind === 0 || isNumericName(propertyDecl.name)) {
var type = getTypeOfSymbol(propertiesArray[i]);
if (!ts.contains(propTypes, type)) {
propTypes.push(type);
}
}
}
var result = propTypes.length ? getUnionType(propTypes) : undefinedType;
typeFlags |= result.flags;
return result;
}
return undefined;
}
}
function getDeclarationKindFromSymbol(s) {
return s.valueDeclaration ? s.valueDeclaration.kind : 128;
}
function getDeclarationFlagsFromSymbol(s) {
return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 16 | 128 : 0;
}
function checkClassPropertyAccess(node, left, type, prop) {
var flags = getDeclarationFlagsFromSymbol(prop);
if (!(flags & (32 | 64))) {
return;
}
var enclosingClassDeclaration = ts.getAncestor(node, 194);
var enclosingClass = enclosingClassDeclaration ? getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClassDeclaration)) : undefined;
var declaringClass = getDeclaredTypeOfSymbol(prop.parent);
if (flags & 32) {
if (declaringClass !== enclosingClass) {
error(node, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(declaringClass));
}
return;
}
if (left.kind === 90) {
return;
}
if (!enclosingClass || !hasBaseType(enclosingClass, declaringClass)) {
error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass));
return;
}
if (flags & 128) {
return;
}
if (!(getTargetType(type).flags & (1024 | 2048) && hasBaseType(type, enclosingClass))) {
error(node, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
}
}
function checkPropertyAccessExpression(node) {
return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name);
}
function checkQualifiedName(node) {
return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right);
}
function checkPropertyAccessExpressionOrQualifiedName(node, left, right) {
var type = checkExpressionOrQualifiedName(left);
if (type === unknownType)
return type;
if (type !== anyType) {
var apparentType = getApparentType(getWidenedType(type));
if (apparentType === unknownType) {
return unknownType;
}
var prop = getPropertyOfType(apparentType, right.text);
if (!prop) {
if (right.text) {
error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type));
}
return unknownType;
}
getNodeLinks(node).resolvedSymbol = prop;
if (prop.parent && prop.parent.flags & 32) {
if (left.kind === 90 && getDeclarationKindFromSymbol(prop) !== 130) {
error(right, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
}
else {
checkClassPropertyAccess(node, left, type, prop);
}
}
return getTypeOfSymbol(prop);
}
return anyType;
}
function isValidPropertyAccess(node, propertyName) {
var left = node.kind === 151 ? node.expression : node.left;
var type = checkExpressionOrQualifiedName(left);
if (type !== unknownType && type !== anyType) {
var prop = getPropertyOfType(getWidenedType(type), propertyName);
if (prop && prop.parent && prop.parent.flags & 32) {
if (left.kind === 90 && getDeclarationKindFromSymbol(prop) !== 130) {
return false;
}
else {
var modificationCount = diagnostics.getModificationCount();
checkClassPropertyAccess(node, left, type, prop);
return diagnostics.getModificationCount() === modificationCount;
}
}
}
return true;
}
function checkIndexedAccess(node) {
if (!node.argumentExpression) {
var sourceFile = getSourceFile(node);
if (node.parent.kind === 154 && node.parent.expression === node) {
var start = ts.skipTrivia(sourceFile.text, node.expression.end);
var end = node.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);
}
else {
var start = node.end - "]".length;
var end = node.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Expression_expected);
}
}
var objectType = getApparentType(checkExpression(node.expression));
var indexType = node.argumentExpression ? checkExpression(node.argumentExpression) : unknownType;
if (objectType === unknownType) {
return unknownType;
}
var isConstEnum = isConstEnumObjectType(objectType);
if (isConstEnum &&
(!node.argumentExpression || node.argumentExpression.kind !== 8)) {
error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
return unknownType;
}
if (node.argumentExpression) {
var name = getPropertyNameForIndexedAccess(node.argumentExpression, indexType);
if (name !== undefined) {
var prop = getPropertyOfType(objectType, name);
if (prop) {
getNodeLinks(node).resolvedSymbol = prop;
return getTypeOfSymbol(prop);
}
else if (isConstEnum) {
error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name, symbolToString(objectType.symbol));
return unknownType;
}
}
}
if (allConstituentTypesHaveKind(indexType, 1 | 258 | 132 | 1048576)) {
if (allConstituentTypesHaveKind(indexType, 1 | 132)) {
var numberIndexType = getIndexTypeOfType(objectType, 1);
if (numberIndexType) {
return numberIndexType;
}
}
var stringIndexType = getIndexTypeOfType(objectType, 0);
if (stringIndexType) {
return stringIndexType;
}
if (compilerOptions.noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && objectType !== anyType) {
error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type);
}
return anyType;
}
error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_symbol_or_any);
return unknownType;
}
function getPropertyNameForIndexedAccess(indexArgumentExpression, indexArgumentType) {
if (indexArgumentExpression.kind === 8 || indexArgumentExpression.kind === 7) {
return indexArgumentExpression.text;
}
if (checkThatExpressionIsProperSymbolReference(indexArgumentExpression, indexArgumentType, false)) {
var rightHandSideName = indexArgumentExpression.name.text;
return ts.getPropertyNameForKnownSymbolName(rightHandSideName);
}
return undefined;
}
function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) {
if (expressionType === unknownType) {
return false;
}
if (!ts.isWellKnownSymbolSyntactically(expression)) {
return false;
}
if ((expressionType.flags & 1048576) === 0) {
if (reportError) {
error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression));
}
return false;
}
var leftHandSide = expression.expression;
var leftHandSideSymbol = getResolvedSymbol(leftHandSide);
if (!leftHandSideSymbol) {
return false;
}
var globalESSymbol = getGlobalESSymbolConstructorSymbol();
if (!globalESSymbol) {
return false;
}
if (leftHandSideSymbol !== globalESSymbol) {
if (reportError) {
error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object);
}
return false;
}
return true;
}
function resolveUntypedCall(node) {
if (node.kind === 155) {
checkExpression(node.template);
}
else {
ts.forEach(node.arguments, function (argument) {
checkExpression(argument);
});
}
return anySignature;
}
function resolveErrorCall(node) {
resolveUntypedCall(node);
return unknownSignature;
}
function reorderCandidates(signatures, result) {
var lastParent;
var lastSymbol;
var cutoffIndex = 0;
var index;
var specializedIndex = -1;
var spliceIndex;
ts.Debug.assert(!result.length);
for (var i = 0; i < signatures.length; i++) {
var signature = signatures[i];
var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
var parent = signature.declaration && signature.declaration.parent;
if (!lastSymbol || symbol === lastSymbol) {
if (lastParent && parent === lastParent) {
index++;
}
else {
lastParent = parent;
index = cutoffIndex;
}
}
else {
index = cutoffIndex = result.length;
lastParent = parent;
}
lastSymbol = symbol;
if (signature.hasStringLiterals) {
specializedIndex++;
spliceIndex = specializedIndex;
cutoffIndex++;
}
else {
spliceIndex = index;
}
result.splice(spliceIndex, 0, signature);
}
}
function getSpreadArgumentIndex(args) {
for (var i = 0; i < args.length; i++) {
if (args[i].kind === 169) {
return i;
}
}
return -1;
}
function hasCorrectArity(node, args, signature) {
var adjustedArgCount;
var typeArguments;
var callIsIncomplete;
if (node.kind === 155) {
var tagExpression = node;
adjustedArgCount = args.length;
typeArguments = undefined;
if (tagExpression.template.kind === 167) {
var templateExpression = tagExpression.template;
var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans);
ts.Debug.assert(lastSpan !== undefined);
callIsIncomplete = ts.getFullWidth(lastSpan.literal) === 0 || !!lastSpan.literal.isUnterminated;
}
else {
var templateLiteral = tagExpression.template;
ts.Debug.assert(templateLiteral.kind === 10);
callIsIncomplete = !!templateLiteral.isUnterminated;
}
}
else {
var callExpression = node;
if (!callExpression.arguments) {
ts.Debug.assert(callExpression.kind === 154);
return signature.minArgumentCount === 0;
}
adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length;
callIsIncomplete = callExpression.arguments.end === callExpression.end;
typeArguments = callExpression.typeArguments;
}
var hasRightNumberOfTypeArgs = !typeArguments ||
(signature.typeParameters && typeArguments.length === signature.typeParameters.length);
if (!hasRightNumberOfTypeArgs) {
return false;
}
var spreadArgIndex = getSpreadArgumentIndex(args);
if (spreadArgIndex >= 0) {
return signature.hasRestParameter && spreadArgIndex >= signature.parameters.length - 1;
}
if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) {
return false;
}
var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount;
return callIsIncomplete || hasEnoughArguments;
}
function getSingleCallSignature(type) {
if (type.flags & 48128) {
var resolved = resolveObjectOrUnionTypeMembers(type);
if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 &&
resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) {
return resolved.callSignatures[0];
}
}
return undefined;
}
function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) {
var context = createInferenceContext(signature.typeParameters, true);
forEachMatchingParameterType(contextualSignature, signature, function (source, target) {
inferTypes(context, instantiateType(source, contextualMapper), target);
});
return getSignatureInstantiation(signature, getInferredTypes(context));
}
function inferTypeArguments(signature, args, excludeArgument) {
var typeParameters = signature.typeParameters;
var context = createInferenceContext(typeParameters, false);
var inferenceMapper = createInferenceMapper(context);
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (arg.kind !== 170) {
var paramType = getTypeAtPosition(signature, arg.kind === 169 ? -1 : i);
if (i === 0 && args[i].parent.kind === 155) {
var argType = globalTemplateStringsArrayType;
}
else {
var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper;
var argType = checkExpressionWithContextualType(arg, paramType, mapper);
}
inferTypes(context, argType, paramType);
}
}
if (excludeArgument) {
for (var i = 0; i < args.length; i++) {
if (excludeArgument[i] === false) {
var arg = args[i];
var paramType = getTypeAtPosition(signature, arg.kind === 169 ? -1 : i);
inferTypes(context, checkExpressionWithContextualType(arg, paramType, inferenceMapper), paramType);
}
}
}
var inferredTypes = getInferredTypes(context);
context.failedTypeParameterIndex = ts.indexOf(inferredTypes, inferenceFailureType);
for (var i = 0; i < inferredTypes.length; i++) {
if (inferredTypes[i] === inferenceFailureType) {
inferredTypes[i] = unknownType;
}
}
return context;
}
function checkTypeArguments(signature, typeArguments, typeArgumentResultTypes, reportErrors) {
var typeParameters = signature.typeParameters;
var typeArgumentsAreAssignable = true;
for (var i = 0; i < typeParameters.length; i++) {
var typeArgNode = typeArguments[i];
var typeArgument = getTypeFromTypeNode(typeArgNode);
typeArgumentResultTypes[i] = typeArgument;
if (typeArgumentsAreAssignable) {
var constraint = getConstraintOfTypeParameter(typeParameters[i]);
if (constraint) {
typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, constraint, reportErrors ? typeArgNode : undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
}
}
return typeArgumentsAreAssignable;
}
function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (arg.kind !== 170) {
var paramType = getTypeAtPosition(signature, arg.kind === 169 ? -1 : i);
var argType = i === 0 && node.kind === 155 ? globalTemplateStringsArrayType : arg.kind === 8 && !reportErrors ? getStringLiteralType(arg) : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
if (!checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1)) {
return false;
}
}
}
return true;
}
function getEffectiveCallArguments(node) {
var args;
if (node.kind === 155) {
var template = node.template;
args = [template];
if (template.kind === 167) {
ts.forEach(template.templateSpans, function (span) {
args.push(span.expression);
});
}
}
else {
args = node.arguments || emptyArray;
}
return args;
}
function getEffectiveTypeArguments(callExpression) {
if (callExpression.expression.kind === 90) {
var containingClass = ts.getAncestor(callExpression, 194);
var baseClassTypeNode = containingClass && ts.getClassBaseTypeNode(containingClass);
return baseClassTypeNode && baseClassTypeNode.typeArguments;
}
else {
return callExpression.typeArguments;
}
}
function resolveCall(node, signatures, candidatesOutArray) {
var isTaggedTemplate = node.kind === 155;
var typeArguments;
if (!isTaggedTemplate) {
typeArguments = getEffectiveTypeArguments(node);
if (node.expression.kind !== 90) {
ts.forEach(typeArguments, checkSourceElement);
}
}
var candidates = candidatesOutArray || [];
reorderCandidates(signatures, candidates);
if (!candidates.length) {
error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
return resolveErrorCall(node);
}
var args = getEffectiveCallArguments(node);
var excludeArgument;
for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) {
if (isContextSensitive(args[i])) {
if (!excludeArgument) {
excludeArgument = new Array(args.length);
}
excludeArgument[i] = true;
}
}
var candidateForArgumentError;
var candidateForTypeArgumentError;
var resultOfFailedInference;
var result;
if (candidates.length > 1) {
result = chooseOverload(candidates, subtypeRelation);
}
if (!result) {
candidateForArgumentError = undefined;
candidateForTypeArgumentError = undefined;
resultOfFailedInference = undefined;
result = chooseOverload(candidates, assignableRelation);
}
if (result) {
return result;
}
if (candidateForArgumentError) {
checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true);
}
else if (candidateForTypeArgumentError) {
if (!isTaggedTemplate && node.typeArguments) {
checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, [], true);
}
else {
ts.Debug.assert(resultOfFailedInference.failedTypeParameterIndex >= 0);
var failedTypeParameter = candidateForTypeArgumentError.typeParameters[resultOfFailedInference.failedTypeParameterIndex];
var inferenceCandidates = getInferenceCandidates(resultOfFailedInference, resultOfFailedInference.failedTypeParameterIndex);
var diagnosticChainHead = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly, typeToString(failedTypeParameter));
reportNoCommonSupertypeError(inferenceCandidates, node.expression || node.tag, diagnosticChainHead);
}
}
else {
error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
}
if (!produceDiagnostics) {
for (var i = 0, n = candidates.length; i < n; i++) {
if (hasCorrectArity(node, args, candidates[i])) {
return candidates[i];
}
}
}
return resolveErrorCall(node);
function chooseOverload(candidates, relation) {
for (var i = 0; i < candidates.length; i++) {
if (!hasCorrectArity(node, args, candidates[i])) {
continue;
}
var originalCandidate = candidates[i];
var inferenceResult;
while (true) {
var candidate = originalCandidate;
if (candidate.typeParameters) {
var typeArgumentTypes;
var typeArgumentsAreValid;
if (typeArguments) {
typeArgumentTypes = new Array(candidate.typeParameters.length);
typeArgumentsAreValid = checkTypeArguments(candidate, typeArguments, typeArgumentTypes, false);
}
else {
inferenceResult = inferTypeArguments(candidate, args, excludeArgument);
typeArgumentsAreValid = inferenceResult.failedTypeParameterIndex < 0;
typeArgumentTypes = inferenceResult.inferredTypes;
}
if (!typeArgumentsAreValid) {
break;
}
candidate = getSignatureInstantiation(candidate, typeArgumentTypes);
}
if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
break;
}
var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1;
if (index < 0) {
return candidate;
}
excludeArgument[index] = false;
}
if (originalCandidate.typeParameters) {
var instantiatedCandidate = candidate;
if (typeArgumentsAreValid) {
candidateForArgumentError = instantiatedCandidate;
}
else {
candidateForTypeArgumentError = originalCandidate;
if (!typeArguments) {
resultOfFailedInference = inferenceResult;
}
}
}
else {
ts.Debug.assert(originalCandidate === candidate);
candidateForArgumentError = originalCandidate;
}
}
return undefined;
}
}
function resolveCallExpression(node, candidatesOutArray) {
if (node.expression.kind === 90) {
var superType = checkSuperExpression(node.expression);
if (superType !== unknownType) {
return resolveCall(node, getSignaturesOfType(superType, 1), candidatesOutArray);
}
return resolveUntypedCall(node);
}
var funcType = checkExpression(node.expression);
var apparentType = getApparentType(funcType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0);
var constructSignatures = getSignaturesOfType(apparentType, 1);
if (funcType === anyType || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) {
if (node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
if (constructSignatures.length) {
error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
}
else {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
}
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function resolveNewExpression(node, candidatesOutArray) {
if (node.arguments && languageVersion < 2) {
var spreadIndex = getSpreadArgumentIndex(node.arguments);
if (spreadIndex >= 0) {
error(node.arguments[spreadIndex], ts.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_6_and_higher);
}
}
var expressionType = checkExpression(node.expression);
if (expressionType === anyType) {
if (node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
expressionType = getApparentType(expressionType);
if (expressionType === unknownType) {
return resolveErrorCall(node);
}
var constructSignatures = getSignaturesOfType(expressionType, 1);
if (constructSignatures.length) {
return resolveCall(node, constructSignatures, candidatesOutArray);
}
var callSignatures = getSignaturesOfType(expressionType, 0);
if (callSignatures.length) {
var signature = resolveCall(node, callSignatures, candidatesOutArray);
if (getReturnTypeOfSignature(signature) !== voidType) {
error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
}
return signature;
}
error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature);
return resolveErrorCall(node);
}
function resolveTaggedTemplateExpression(node, candidatesOutArray) {
var tagType = checkExpression(node.tag);
var apparentType = getApparentType(tagType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0);
if (tagType === anyType || (!callSignatures.length && !(tagType.flags & 16384) && isTypeAssignableTo(tagType, globalFunctionType))) {
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature);
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function getResolvedSignature(node, candidatesOutArray) {
var links = getNodeLinks(node);
if (!links.resolvedSignature || candidatesOutArray) {
links.resolvedSignature = anySignature;
if (node.kind === 153) {
links.resolvedSignature = resolveCallExpression(node, candidatesOutArray);
}
else if (node.kind === 154) {
links.resolvedSignature = resolveNewExpression(node, candidatesOutArray);
}
else if (node.kind === 155) {
links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray);
}
else {
ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable.");
}
}
return links.resolvedSignature;
}
function checkCallExpression(node) {
checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node, node.arguments);
var signature = getResolvedSignature(node);
if (node.expression.kind === 90) {
return voidType;
}
if (node.kind === 154) {
var declaration = signature.declaration;
if (declaration &&
declaration.kind !== 131 &&
declaration.kind !== 135 &&
declaration.kind !== 139) {
if (compilerOptions.noImplicitAny) {
error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
}
return anyType;
}
}
return getReturnTypeOfSignature(signature);
}
function checkTaggedTemplateExpression(node) {
if (languageVersion < 2) {
grammarErrorOnFirstToken(node.template, ts.Diagnostics.Tagged_templates_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
return getReturnTypeOfSignature(getResolvedSignature(node));
}
function checkTypeAssertion(node) {
var exprType = checkExpression(node.expression);
var targetType = getTypeFromTypeNode(node.type);
if (produceDiagnostics && targetType !== unknownType) {
var widenedType = getWidenedType(exprType);
if (!(isTypeAssignableTo(targetType, widenedType))) {
checkTypeAssignableTo(exprType, targetType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other);
}
}
return targetType;
}
function getTypeAtPosition(signature, pos) {
if (pos >= 0) {
return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType;
}
return signature.hasRestParameter ? getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]) : anyArrayType;
}
function assignContextualParameterTypes(signature, context, mapper) {
var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
for (var i = 0; i < len; i++) {
var parameter = signature.parameters[i];
var links = getSymbolLinks(parameter);
links.type = instantiateType(getTypeAtPosition(context, i), mapper);
}
if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) {
var parameter = signature.parameters[signature.parameters.length - 1];
var links = getSymbolLinks(parameter);
links.type = instantiateType(getTypeOfSymbol(context.parameters[context.parameters.length - 1]), mapper);
}
}
function getReturnTypeFromBody(func, contextualMapper) {
var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
if (!func.body) {
return unknownType;
}
if (func.body.kind !== 172) {
var type = checkExpressionCached(func.body, contextualMapper);
}
else {
var types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper);
if (types.length === 0) {
return voidType;
}
var type = contextualSignature ? getUnionType(types) : getCommonSupertype(types);
if (!type) {
error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions);
return unknownType;
}
}
if (!contextualSignature) {
reportErrorsFromWidening(func, type);
}
return getWidenedType(type);
}
function checkAndAggregateReturnExpressionTypes(body, contextualMapper) {
var aggregatedTypes = [];
ts.forEachReturnStatement(body, function (returnStatement) {
var expr = returnStatement.expression;
if (expr) {
var type = checkExpressionCached(expr, contextualMapper);
if (!ts.contains(aggregatedTypes, type)) {
aggregatedTypes.push(type);
}
}
});
return aggregatedTypes;
}
function bodyContainsAReturnStatement(funcBody) {
return ts.forEachReturnStatement(funcBody, function (returnStatement) {
return true;
});
}
function bodyContainsSingleThrowStatement(body) {
return (body.statements.length === 1) && (body.statements[0].kind === 188);
}
function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) {
if (!produceDiagnostics) {
return;
}
if (returnType === voidType || returnType === anyType) {
return;
}
if (ts.nodeIsMissing(func.body) || func.body.kind !== 172) {
return;
}
var bodyBlock = func.body;
if (bodyContainsAReturnStatement(bodyBlock)) {
return;
}
if (bodyContainsSingleThrowStatement(bodyBlock)) {
return;
}
error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement);
}
function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) {
ts.Debug.assert(node.kind !== 130 || ts.isObjectLiteralMethod(node));
var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
if (!hasGrammarError && node.kind === 158) {
checkGrammarFunctionName(node.name) || checkGrammarForGenerator(node);
}
if (contextualMapper === identityMapper && isContextSensitive(node)) {
return anyFunctionType;
}
var links = getNodeLinks(node);
var type = getTypeOfSymbol(node.symbol);
if (!(links.flags & 64)) {
var contextualSignature = getContextualSignature(node);
if (!(links.flags & 64)) {
links.flags |= 64;
if (contextualSignature) {
var signature = getSignaturesOfType(type, 0)[0];
if (isContextSensitive(node)) {
assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper);
}
if (!node.type) {
signature.resolvedReturnType = resolvingType;
var returnType = getReturnTypeFromBody(node, contextualMapper);
if (signature.resolvedReturnType === resolvingType) {
signature.resolvedReturnType = returnType;
}
}
}
checkSignatureDeclaration(node);
}
}
if (produceDiagnostics && node.kind !== 130 && node.kind !== 129) {
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
}
return type;
}
function checkFunctionExpressionOrObjectLiteralMethodBody(node) {
ts.Debug.assert(node.kind !== 130 || ts.isObjectLiteralMethod(node));
if (node.type) {
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
}
if (node.body) {
if (node.body.kind === 172) {
checkSourceElement(node.body);
}
else {
var exprType = checkExpression(node.body);
if (node.type) {
checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, undefined);
}
checkFunctionExpressionBodies(node.body);
}
}
}
function checkArithmeticOperandType(operand, type, diagnostic) {
if (!allConstituentTypesHaveKind(type, 1 | 132)) {
error(operand, diagnostic);
return false;
}
return true;
}
function checkReferenceExpression(n, invalidReferenceMessage, constantVarianleMessage) {
function findSymbol(n) {
var symbol = getNodeLinks(n).resolvedSymbol;
return symbol && getExportSymbolOfValueSymbolIfExported(symbol);
}
function isReferenceOrErrorExpression(n) {
switch (n.kind) {
case 64:
var symbol = findSymbol(n);
return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 3) !== 0;
case 151:
var symbol = findSymbol(n);
return !symbol || symbol === unknownSymbol || (symbol.flags & ~8) !== 0;
case 152:
return true;
case 157:
return isReferenceOrErrorExpression(n.expression);
default:
return false;
}
}
function isConstVariableReference(n) {
switch (n.kind) {
case 64:
case 151:
var symbol = findSymbol(n);
return symbol && (symbol.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(symbol) & 4096) !== 0;
case 152:
var index = n.argumentExpression;
var symbol = findSymbol(n.expression);
if (symbol && index && index.kind === 8) {
var name = index.text;
var prop = getPropertyOfType(getTypeOfSymbol(symbol), name);
return prop && (prop.flags & 3) !== 0 && (getDeclarationFlagsFromSymbol(prop) & 4096) !== 0;
}
return false;
case 157:
return isConstVariableReference(n.expression);
default:
return false;
}
}
if (!isReferenceOrErrorExpression(n)) {
error(n, invalidReferenceMessage);
return false;
}
if (isConstVariableReference(n)) {
error(n, constantVarianleMessage);
return false;
}
return true;
}
function checkDeleteExpression(node) {
if (node.parserContextFlags & 1 && node.expression.kind === 64) {
grammarErrorOnNode(node.expression, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode);
}
var operandType = checkExpression(node.expression);
return booleanType;
}
function checkTypeOfExpression(node) {
var operandType = checkExpression(node.expression);
return stringType;
}
function checkVoidExpression(node) {
var operandType = checkExpression(node.expression);
return undefinedType;
}
function checkPrefixUnaryExpression(node) {
if ((node.operator === 38 || node.operator === 39)) {
checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
}
var operandType = checkExpression(node.operand);
switch (node.operator) {
case 33:
case 34:
case 47:
if (someConstituentTypeHasKind(operandType, 1048576)) {
error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
}
return numberType;
case 46:
return booleanType;
case 38:
case 39:
var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
}
return numberType;
}
return unknownType;
}
function checkPostfixUnaryExpression(node) {
checkGrammarEvalOrArgumentsInStrictMode(node, node.operand);
var operandType = checkExpression(node.operand);
var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant);
}
return numberType;
}
function someConstituentTypeHasKind(type, kind) {
if (type.flags & kind) {
return true;
}
if (type.flags & 16384) {
var types = type.types;
for (var i = 0; i < types.length; i++) {
if (types[i].flags & kind) {
return true;
}
}
return false;
}
return false;
}
function allConstituentTypesHaveKind(type, kind) {
if (type.flags & kind) {
return true;
}
if (type.flags & 16384) {
var types = type.types;
for (var i = 0; i < types.length; i++) {
if (!(types[i].flags & kind)) {
return false;
}
}
return true;
}
return false;
}
function isConstEnumObjectType(type) {
return type.flags & (48128 | 32768) && type.symbol && isConstEnumSymbol(type.symbol);
}
function isConstEnumSymbol(symbol) {
return (symbol.flags & 128) !== 0;
}
function checkInstanceOfExpression(node, leftType, rightType) {
if (allConstituentTypesHaveKind(leftType, 1049086)) {
error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
if (!(rightType.flags & 1 || isTypeSubtypeOf(rightType, globalFunctionType))) {
error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type);
}
return booleanType;
}
function checkInExpression(node, leftType, rightType) {
if (!allConstituentTypesHaveKind(leftType, 1 | 258 | 132 | 1048576)) {
error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
}
if (!allConstituentTypesHaveKind(rightType, 1 | 48128 | 512)) {
error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
return booleanType;
}
function checkObjectLiteralAssignment(node, sourceType, contextualMapper) {
var properties = node.properties;
for (var i = 0; i < properties.length; i++) {
var p = properties[i];
if (p.kind === 207 || p.kind === 208) {
var name = p.name;
var type = sourceType.flags & 1 ? sourceType : getTypeOfPropertyOfType(sourceType, name.text) ||
isNumericLiteralName(name.text) && getIndexTypeOfType(sourceType, 1) ||
getIndexTypeOfType(sourceType, 0);
if (type) {
checkDestructuringAssignment(p.initializer || name, type);
}
else {
error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name));
}
}
else {
error(p, ts.Diagnostics.Property_assignment_expected);
}
}
return sourceType;
}
function checkArrayLiteralAssignment(node, sourceType, contextualMapper) {
if (!isTypeAssignableTo(sourceType, anyArrayType)) {
error(node, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(sourceType));
return sourceType;
}
var elements = node.elements;
for (var i = 0; i < elements.length; i++) {
var e = elements[i];
if (e.kind !== 170) {
if (e.kind !== 169) {
var propName = "" + i;
var type = sourceType.flags & 1 ? sourceType : isTupleLikeType(sourceType) ? getTypeOfPropertyOfType(sourceType, propName) : getIndexTypeOfType(sourceType, 1);
if (type) {
checkDestructuringAssignment(e, type, contextualMapper);
}
else {
error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName);
}
}
else {
if (i === elements.length - 1) {
checkReferenceAssignment(e.expression, sourceType, contextualMapper);
}
else {
error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
}
}
}
}
return sourceType;
}
function checkDestructuringAssignment(target, sourceType, contextualMapper) {
if (target.kind === 165 && target.operatorToken.kind === 52) {
checkBinaryExpression(target, contextualMapper);
target = target.left;
}
if (target.kind === 150) {
return checkObjectLiteralAssignment(target, sourceType, contextualMapper);
}
if (target.kind === 149) {
return checkArrayLiteralAssignment(target, sourceType, contextualMapper);
}
return checkReferenceAssignment(target, sourceType, contextualMapper);
}
function checkReferenceAssignment(target, sourceType, contextualMapper) {
var targetType = checkExpression(target, contextualMapper);
if (checkReferenceExpression(target, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant)) {
checkTypeAssignableTo(sourceType, targetType, target, undefined);
}
return sourceType;
}
function checkBinaryExpression(node, contextualMapper) {
if (ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) {
checkGrammarEvalOrArgumentsInStrictMode(node, node.left);
}
var operator = node.operatorToken.kind;
if (operator === 52 && (node.left.kind === 150 || node.left.kind === 149)) {
return checkDestructuringAssignment(node.left, checkExpression(node.right, contextualMapper), contextualMapper);
}
var leftType = checkExpression(node.left, contextualMapper);
var rightType = checkExpression(node.right, contextualMapper);
switch (operator) {
case 35:
case 55:
case 36:
case 56:
case 37:
case 57:
case 34:
case 54:
case 40:
case 58:
case 41:
case 59:
case 42:
case 60:
case 44:
case 62:
case 45:
case 63:
case 43:
case 61:
if (leftType.flags & (32 | 64))
leftType = rightType;
if (rightType.flags & (32 | 64))
rightType = leftType;
var suggestedOperator;
if ((leftType.flags & 8) &&
(rightType.flags & 8) &&
(suggestedOperator = getSuggestedBooleanOperator(node.operatorToken.kind)) !== undefined) {
error(node, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(node.operatorToken.kind), ts.tokenToString(suggestedOperator));
}
else {
var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
if (leftOk && rightOk) {
checkAssignmentOperator(numberType);
}
}
return numberType;
case 33:
case 53:
if (leftType.flags & (32 | 64))
leftType = rightType;
if (rightType.flags & (32 | 64))
rightType = leftType;
var resultType;
if (allConstituentTypesHaveKind(leftType, 132) && allConstituentTypesHaveKind(rightType, 132)) {
resultType = numberType;
}
else {
if (allConstituentTypesHaveKind(leftType, 258) || allConstituentTypesHaveKind(rightType, 258)) {
resultType = stringType;
}
else if (leftType.flags & 1 || rightType.flags & 1) {
resultType = anyType;
}
if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
return resultType;
}
}
if (!resultType) {
reportOperatorError();
return anyType;
}
if (operator === 53) {
checkAssignmentOperator(resultType);
}
return resultType;
case 24:
case 25:
case 26:
case 27:
if (!checkForDisallowedESSymbolOperand(operator)) {
return booleanType;
}
case 28:
case 29:
case 30:
case 31:
if (!isTypeAssignableTo(leftType, rightType) && !isTypeAssignableTo(rightType, leftType)) {
reportOperatorError();
}
return booleanType;
case 86:
return checkInstanceOfExpression(node, leftType, rightType);
case 85:
return checkInExpression(node, leftType, rightType);
case 48:
return rightType;
case 49:
return getUnionType([leftType, rightType]);
case 52:
checkAssignmentOperator(rightType);
return rightType;
case 23:
return rightType;
}
function checkForDisallowedESSymbolOperand(operator) {
var offendingSymbolOperand = someConstituentTypeHasKind(leftType, 1048576) ? node.left : someConstituentTypeHasKind(rightType, 1048576) ? node.right : undefined;
if (offendingSymbolOperand) {
error(offendingSymbolOperand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(operator));
return false;
}
return true;
}
function getSuggestedBooleanOperator(operator) {
switch (operator) {
case 44:
case 62:
return 49;
case 45:
case 63:
return 31;
case 43:
case 61:
return 48;
default:
return undefined;
}
}
function checkAssignmentOperator(valueType) {
if (produceDiagnostics && operator >= 52 && operator <= 63) {
var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
if (ok) {
checkTypeAssignableTo(valueType, leftType, node.left, undefined);
}
}
}
function reportOperatorError() {
error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operatorToken.kind), typeToString(leftType), typeToString(rightType));
}
}
function checkYieldExpression(node) {
if (!(node.parserContextFlags & 4)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expression_must_be_contained_within_a_generator_declaration);
}
else {
grammarErrorOnFirstToken(node, ts.Diagnostics.yield_expressions_are_not_currently_supported);
}
}
function checkConditionalExpression(node, contextualMapper) {
checkExpression(node.condition);
var type1 = checkExpression(node.whenTrue, contextualMapper);
var type2 = checkExpression(node.whenFalse, contextualMapper);
return getUnionType([type1, type2]);
}
function checkTemplateExpression(node) {
ts.forEach(node.templateSpans, function (templateSpan) {
checkExpression(templateSpan.expression);
});
return stringType;
}
function checkExpressionWithContextualType(node, contextualType, contextualMapper) {
var saveContextualType = node.contextualType;
node.contextualType = contextualType;
var result = checkExpression(node, contextualMapper);
node.contextualType = saveContextualType;
return result;
}
function checkExpressionCached(node, contextualMapper) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = checkExpression(node, contextualMapper);
}
return links.resolvedType;
}
function checkPropertyAssignment(node, contextualMapper) {
if (node.name.kind === 124) {
checkComputedPropertyName(node.name);
}
return checkExpression(node.initializer, contextualMapper);
}
function checkObjectLiteralMethod(node, contextualMapper) {
checkGrammarMethod(node);
if (node.name.kind === 124) {
checkComputedPropertyName(node.name);
}
var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
}
function instantiateTypeWithSingleGenericCallSignature(node, type, contextualMapper) {
if (contextualMapper && contextualMapper !== identityMapper) {
var signature = getSingleCallSignature(type);
if (signature && signature.typeParameters) {
var contextualType = getContextualType(node);
if (contextualType) {
var contextualSignature = getSingleCallSignature(contextualType);
if (contextualSignature && !contextualSignature.typeParameters) {
return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper));
}
}
}
}
return type;
}
function checkExpression(node, contextualMapper) {
return checkExpressionOrQualifiedName(node, contextualMapper);
}
function checkExpressionOrQualifiedName(node, contextualMapper) {
var type;
if (node.kind == 123) {
type = checkQualifiedName(node);
}
else {
var uninstantiatedType = checkExpressionWorker(node, contextualMapper);
type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper);
}
if (isConstEnumObjectType(type)) {
var ok = (node.parent.kind === 151 && node.parent.expression === node) ||
(node.parent.kind === 152 && node.parent.expression === node) ||
((node.kind === 64 || node.kind === 123) && isInRightSideOfImportOrExportAssignment(node));
if (!ok) {
error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment);
}
}
return type;
}
function checkNumericLiteral(node) {
checkGrammarNumbericLiteral(node);
return numberType;
}
function checkExpressionWorker(node, contextualMapper) {
switch (node.kind) {
case 64:
return checkIdentifier(node);
case 92:
return checkThisExpression(node);
case 90:
return checkSuperExpression(node);
case 88:
return nullType;
case 94:
case 79:
return booleanType;
case 7:
return checkNumericLiteral(node);
case 167:
return checkTemplateExpression(node);
case 8:
case 10:
return stringType;
case 9:
return globalRegExpType;
case 149:
return checkArrayLiteral(node, contextualMapper);
case 150:
return checkObjectLiteral(node, contextualMapper);
case 151:
return checkPropertyAccessExpression(node);
case 152:
return checkIndexedAccess(node);
case 153:
case 154:
return checkCallExpression(node);
case 155:
return checkTaggedTemplateExpression(node);
case 156:
return checkTypeAssertion(node);
case 157:
return checkExpression(node.expression, contextualMapper);
case 158:
case 159:
return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper);
case 161:
return checkTypeOfExpression(node);
case 160:
return checkDeleteExpression(node);
case 162:
return checkVoidExpression(node);
case 163:
return checkPrefixUnaryExpression(node);
case 164:
return checkPostfixUnaryExpression(node);
case 165:
return checkBinaryExpression(node, contextualMapper);
case 166:
return checkConditionalExpression(node, contextualMapper);
case 169:
return checkSpreadElementExpression(node, contextualMapper);
case 170:
return undefinedType;
case 168:
checkYieldExpression(node);
return unknownType;
}
return unknownType;
}
function checkTypeParameter(node) {
if (node.expression) {
grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected);
}
checkSourceElement(node.constraint);
if (produceDiagnostics) {
checkTypeParameterHasIllegalReferencesInConstraint(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0);
}
}
function checkParameter(node) {
checkGrammarModifiers(node) || checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
checkVariableLikeDeclaration(node);
var func = ts.getContainingFunction(node);
if (node.flags & 112) {
func = ts.getContainingFunction(node);
if (!(func.kind === 131 && ts.nodeIsPresent(func.body))) {
error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
}
}
if (node.questionToken && ts.isBindingPattern(node.name) && func.body) {
error(node, ts.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature);
}
if (node.dotDotDotToken) {
if (!isArrayType(getTypeOfSymbol(node.symbol))) {
error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
}
}
}
function checkSignatureDeclaration(node) {
if (node.kind === 136) {
checkGrammarIndexSignature(node);
}
else if (node.kind === 138 || node.kind === 193 || node.kind === 139 ||
node.kind === 134 || node.kind === 131 ||
node.kind === 135) {
checkGrammarFunctionLikeDeclaration(node);
}
checkTypeParameters(node.typeParameters);
ts.forEach(node.parameters, checkParameter);
if (node.type) {
checkSourceElement(node.type);
}
if (produceDiagnostics) {
checkCollisionWithArgumentsInGeneratedCode(node);
if (compilerOptions.noImplicitAny && !node.type) {
switch (node.kind) {
case 135:
error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
case 134:
error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
}
}
}
checkSpecializedSignatureDeclaration(node);
}
function checkTypeForDuplicateIndexSignatures(node) {
if (node.kind === 195) {
var nodeSymbol = getSymbolOfNode(node);
if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
return;
}
}
var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
if (indexSymbol) {
var seenNumericIndexer = false;
var seenStringIndexer = false;
for (var i = 0, len = indexSymbol.declarations.length; i < len; ++i) {
var declaration = indexSymbol.declarations[i];
if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
switch (declaration.parameters[0].type.kind) {
case 119:
if (!seenStringIndexer) {
seenStringIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
}
break;
case 117:
if (!seenNumericIndexer) {
seenNumericIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
}
break;
}
}
}
}
}
function checkPropertyDeclaration(node) {
checkGrammarModifiers(node) || checkGrammarProperty(node) || checkGrammarComputedPropertyName(node.name);
checkVariableLikeDeclaration(node);
}
function checkMethodDeclaration(node) {
checkGrammarMethod(node) || checkGrammarComputedPropertyName(node.name);
checkFunctionLikeDeclaration(node);
}
function checkConstructorDeclaration(node) {
checkSignatureDeclaration(node);
checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node);
checkSourceElement(node.body);
var symbol = getSymbolOfNode(node);
var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind);
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(symbol);
}
if (ts.nodeIsMissing(node.body)) {
return;
}
if (!produceDiagnostics) {
return;
}
function isSuperCallExpression(n) {
return n.kind === 153 && n.expression.kind === 90;
}
function containsSuperCall(n) {
if (isSuperCallExpression(n)) {
return true;
}
switch (n.kind) {
case 158:
case 193:
case 159:
case 150: return false;
default: return ts.forEachChild(n, containsSuperCall);
}
}
function markThisReferencesAsErrors(n) {
if (n.kind === 92) {
error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
}
else if (n.kind !== 158 && n.kind !== 193) {
ts.forEachChild(n, markThisReferencesAsErrors);
}
}
function isInstancePropertyWithInitializer(n) {
return n.kind === 128 &&
!(n.flags & 128) &&
!!n.initializer;
}
if (ts.getClassBaseTypeNode(node.parent)) {
if (containsSuperCall(node.body)) {
var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) ||
ts.forEach(node.parameters, function (p) { return p.flags & (16 | 32 | 64); });
if (superCallShouldBeFirst) {
var statements = node.body.statements;
if (!statements.length || statements[0].kind !== 175 || !isSuperCallExpression(statements[0].expression)) {
error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
}
else {
markThisReferencesAsErrors(statements[0].expression);
}
}
}
else {
error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
}
}
}
function checkAccessorDeclaration(node) {
if (produceDiagnostics) {
checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name);
if (node.kind === 132) {
if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) {
error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement);
}
}
if (!ts.hasDynamicName(node)) {
var otherKind = node.kind === 132 ? 133 : 132;
var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind);
if (otherAccessor) {
if (((node.flags & 112) !== (otherAccessor.flags & 112))) {
error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
}
var currentAccessorType = getAnnotatedAccessorType(node);
var otherAccessorType = getAnnotatedAccessorType(otherAccessor);
if (currentAccessorType && otherAccessorType) {
if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) {
error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type);
}
}
}
}
checkAndStoreTypeOfAccessors(getSymbolOfNode(node));
}
checkFunctionLikeDeclaration(node);
}
function checkTypeReference(node) {
checkGrammarTypeArguments(node, node.typeArguments);
var type = getTypeFromTypeReferenceNode(node);
if (type !== unknownType && node.typeArguments) {
var len = node.typeArguments.length;
for (var i = 0; i < len; i++) {
checkSourceElement(node.typeArguments[i]);
var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]);
if (produceDiagnostics && constraint) {
var typeArgument = type.typeArguments[i];
checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
}
}
}
function checkTypeQuery(node) {
getTypeFromTypeQueryNode(node);
}
function checkTypeLiteral(node) {
ts.forEach(node.members, checkSourceElement);
if (produceDiagnostics) {
var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
}
}
function checkArrayType(node) {
checkSourceElement(node.elementType);
}
function checkTupleType(node) {
var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes);
if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) {
grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty);
}
ts.forEach(node.elementTypes, checkSourceElement);
}
function checkUnionType(node) {
ts.forEach(node.types, checkSourceElement);
}
function isPrivateWithinAmbient(node) {
return (node.flags & 32) && ts.isInAmbientContext(node);
}
function checkSpecializedSignatureDeclaration(signatureDeclarationNode) {
if (!produceDiagnostics) {
return;
}
var signature = getSignatureFromDeclaration(signatureDeclarationNode);
if (!signature.hasStringLiterals) {
return;
}
if (ts.nodeIsPresent(signatureDeclarationNode.body)) {
error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type);
return;
}
var signaturesToCheck;
if (!signatureDeclarationNode.name && signatureDeclarationNode.parent && signatureDeclarationNode.parent.kind === 195) {
ts.Debug.assert(signatureDeclarationNode.kind === 134 || signatureDeclarationNode.kind === 135);
var signatureKind = signatureDeclarationNode.kind === 134 ? 0 : 1;
var containingSymbol = getSymbolOfNode(signatureDeclarationNode.parent);
var containingType = getDeclaredTypeOfSymbol(containingSymbol);
signaturesToCheck = getSignaturesOfType(containingType, signatureKind);
}
else {
signaturesToCheck = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode));
}
for (var i = 0; i < signaturesToCheck.length; i++) {
var otherSignature = signaturesToCheck[i];
if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) {
return;
}
}
error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature);
}
function getEffectiveDeclarationFlags(n, flagsToCheck) {
var flags = ts.getCombinedNodeFlags(n);
if (n.parent.kind !== 195 && ts.isInAmbientContext(n)) {
if (!(flags & 2)) {
flags |= 1;
}
flags |= 2;
}
return flags & flagsToCheck;
}
function checkFunctionOrConstructorSymbol(symbol) {
if (!produceDiagnostics) {
return;
}
function getCanonicalOverload(overloads, implementation) {
var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent;
return implementationSharesContainerWithFirstOverload ? implementation : overloads[0];
}
function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) {
var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags;
if (someButNotAllOverloadFlags !== 0) {
var canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck);
ts.forEach(overloads, function (o) {
var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags;
if (deviation & 1) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported);
}
else if (deviation & 2) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
}
else if (deviation & (32 | 64)) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
}
});
}
}
function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken, allHaveQuestionToken) {
if (someHaveQuestionToken !== allHaveQuestionToken) {
var canonicalHasQuestionToken = ts.hasQuestionToken(getCanonicalOverload(overloads, implementation));
ts.forEach(overloads, function (o) {
var deviation = ts.hasQuestionToken(o) !== canonicalHasQuestionToken;
if (deviation) {
error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required);
}
});
}
}
var flagsToCheck = 1 | 2 | 32 | 64;
var someNodeFlags = 0;
var allNodeFlags = flagsToCheck;
var someHaveQuestionToken = false;
var allHaveQuestionToken = true;
var hasOverloads = false;
var bodyDeclaration;
var lastSeenNonAmbientDeclaration;
var previousDeclaration;
var declarations = symbol.declarations;
var isConstructor = (symbol.flags & 16384) !== 0;
function reportImplementationExpectedError(node) {
if (node.name && ts.getFullWidth(node.name) === 0) {
return;
}
var seen = false;
var subsequentNode = ts.forEachChild(node.parent, function (c) {
if (seen) {
return c;
}
else {
seen = c === node;
}
});
if (subsequentNode) {
if (subsequentNode.kind === node.kind) {
var errorNode = subsequentNode.name || subsequentNode;
if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) {
ts.Debug.assert(node.kind === 130 || node.kind === 129);
ts.Debug.assert((node.flags & 128) !== (subsequentNode.flags & 128));
var diagnostic = node.flags & 128 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
error(errorNode, diagnostic);
return;
}
else if (ts.nodeIsPresent(subsequentNode.body)) {
error(errorNode, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name));
return;
}
}
}
var errorNode = node.name || node;
if (isConstructor) {
error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing);
}
else {
error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);
}
}
var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536;
var duplicateFunctionDeclaration = false;
var multipleConstructorImplementation = false;
for (var i = 0; i < declarations.length; i++) {
var node = declarations[i];
var inAmbientContext = ts.isInAmbientContext(node);
var inAmbientContextOrInterface = node.parent.kind === 195 || node.parent.kind === 141 || inAmbientContext;
if (inAmbientContextOrInterface) {
previousDeclaration = undefined;
}
if (node.kind === 193 || node.kind === 130 || node.kind === 129 || node.kind === 131) {
var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
someNodeFlags |= currentNodeFlags;
allNodeFlags &= currentNodeFlags;
someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node);
allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node);
if (ts.nodeIsPresent(node.body) && bodyDeclaration) {
if (isConstructor) {
multipleConstructorImplementation = true;
}
else {
duplicateFunctionDeclaration = true;
}
}
else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
reportImplementationExpectedError(previousDeclaration);
}
if (ts.nodeIsPresent(node.body)) {
if (!bodyDeclaration) {
bodyDeclaration = node;
}
}
else {
hasOverloads = true;
}
previousDeclaration = node;
if (!inAmbientContextOrInterface) {
lastSeenNonAmbientDeclaration = node;
}
}
}
if (multipleConstructorImplementation) {
ts.forEach(declarations, function (declaration) {
error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
});
}
if (duplicateFunctionDeclaration) {
ts.forEach(declarations, function (declaration) {
error(declaration.name, ts.Diagnostics.Duplicate_function_implementation);
});
}
if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) {
reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
}
if (hasOverloads) {
checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags);
checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken);
if (bodyDeclaration) {
var signatures = getSignaturesOfSymbol(symbol);
var bodySignature = getSignatureFromDeclaration(bodyDeclaration);
if (!bodySignature.hasStringLiterals) {
for (var i = 0, len = signatures.length; i < len; ++i) {
if (!signatures[i].hasStringLiterals && !isSignatureAssignableTo(bodySignature, signatures[i])) {
error(signatures[i].declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);
break;
}
}
}
}
}
}
function checkExportsOnMergedDeclarations(node) {
if (!produceDiagnostics) {
return;
}
var symbol;
var symbol = node.localSymbol;
if (!symbol) {
symbol = getSymbolOfNode(node);
if (!(symbol.flags & 7340032)) {
return;
}
}
if (ts.getDeclarationOfKind(symbol, node.kind) !== node) {
return;
}
var exportedDeclarationSpaces = 0;
var nonExportedDeclarationSpaces = 0;
ts.forEach(symbol.declarations, function (d) {
var declarationSpaces = getDeclarationSpaces(d);
if (getEffectiveDeclarationFlags(d, 1)) {
exportedDeclarationSpaces |= declarationSpaces;
}
else {
nonExportedDeclarationSpaces |= declarationSpaces;
}
});
var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
if (commonDeclarationSpace) {
ts.forEach(symbol.declarations, function (d) {
if (getDeclarationSpaces(d) & commonDeclarationSpace) {
error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(d.name));
}
});
}
function getDeclarationSpaces(d) {
switch (d.kind) {
case 195:
return 2097152;
case 198:
return d.name.kind === 8 || ts.getModuleInstanceState(d) !== 0 ? 4194304 | 1048576 : 4194304;
case 194:
case 197:
return 2097152 | 1048576;
case 200:
var result = 0;
var target = resolveImport(getSymbolOfNode(d));
ts.forEach(target.declarations, function (d) {
result |= getDeclarationSpaces(d);
});
return result;
default:
return 1048576;
}
}
}
function checkFunctionDeclaration(node) {
if (produceDiagnostics) {
checkFunctionLikeDeclaration(node) ||
checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
checkGrammarFunctionName(node.name) ||
checkGrammarForGenerator(node);
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
}
}
function checkFunctionLikeDeclaration(node) {
checkSignatureDeclaration(node);
if (node.name.kind === 124) {
checkComputedPropertyName(node.name);
}
if (!ts.hasDynamicName(node)) {
var symbol = getSymbolOfNode(node);
var localSymbol = node.localSymbol || symbol;
var firstDeclaration = ts.getDeclarationOfKind(localSymbol, node.kind);
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(localSymbol);
}
if (symbol.parent) {
if (ts.getDeclarationOfKind(symbol, node.kind) === node) {
checkFunctionOrConstructorSymbol(symbol);
}
}
}
checkSourceElement(node.body);
if (node.type && !isAccessor(node.kind)) {
checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type));
}
if (compilerOptions.noImplicitAny && ts.nodeIsMissing(node.body) && !node.type && !isPrivateWithinAmbient(node)) {
reportImplicitAnyError(node, anyType);
}
}
function checkBlock(node) {
if (node.kind === 172) {
checkGrammarStatementInAmbientContext(node);
}
ts.forEach(node.statements, checkSourceElement);
if (ts.isFunctionBlock(node) || node.kind === 199) {
checkFunctionExpressionBodies(node);
}
}
function checkCollisionWithArgumentsInGeneratedCode(node) {
if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) {
return;
}
ts.forEach(node.parameters, function (p) {
if (p.name && !ts.isBindingPattern(p.name) && p.name.text === argumentsSymbol.name) {
error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
}
});
}
function needCollisionCheckForIdentifier(node, identifier, name) {
if (!(identifier && identifier.text === name)) {
return false;
}
if (node.kind === 128 ||
node.kind === 127 ||
node.kind === 130 ||
node.kind === 129 ||
node.kind === 132 ||
node.kind === 133) {
return false;
}
if (ts.isInAmbientContext(node)) {
return false;
}
var root = getRootDeclaration(node);
if (root.kind === 126 && ts.nodeIsMissing(root.parent.body)) {
return false;
}
return true;
}
function checkCollisionWithCapturedThisVariable(node, name) {
if (needCollisionCheckForIdentifier(node, name, "_this")) {
potentialThisCollisions.push(node);
}
}
function checkIfThisIsCapturedInEnclosingScope(node) {
var current = node;
while (current) {
if (getNodeCheckFlags(current) & 4) {
var isDeclaration = node.kind !== 64;
if (isDeclaration) {
error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference);
}
return;
}
current = current.parent;
}
}
function checkCollisionWithCapturedSuperVariable(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "_super")) {
return;
}
var enclosingClass = ts.getAncestor(node, 194);
if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
return;
}
if (ts.getClassBaseTypeNode(enclosingClass)) {
var isDeclaration = node.kind !== 64;
if (isDeclaration) {
error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference);
}
}
}
function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
return;
}
if (node.kind === 198 && ts.getModuleInstanceState(node) !== 1) {
return;
}
var parent = getDeclarationContainer(node);
if (parent.kind === 210 && ts.isExternalModule(parent)) {
error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
}
}
function checkVarDeclaredNamesNotShadowed(node) {
if (node.initializer && (ts.getCombinedNodeFlags(node) & 6144) === 0) {
var symbol = getSymbolOfNode(node);
if (symbol.flags & 1) {
var localDeclarationSymbol = resolveName(node, node.name.text, 3, undefined, undefined);
if (localDeclarationSymbol &&
localDeclarationSymbol !== symbol &&
localDeclarationSymbol.flags & 2) {
if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 6144) {
var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 192);
var container = varDeclList.parent.kind === 173 &&
varDeclList.parent.parent;
var namesShareScope = container &&
(container.kind === 172 && ts.isAnyFunction(container.parent) ||
(container.kind === 199 && container.kind === 198) ||
container.kind === 210);
if (!namesShareScope) {
var name = symbolToString(localDeclarationSymbol);
error(ts.getErrorSpanForNode(node), ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name);
}
}
}
}
}
}
function isParameterDeclaration(node) {
while (node.kind === 148) {
node = node.parent.parent;
}
return node.kind === 126;
}
function checkParameterInitializer(node) {
if (getRootDeclaration(node).kind === 126) {
var func = ts.getContainingFunction(node);
visit(node.initializer);
}
function visit(n) {
if (n.kind === 64) {
var referencedSymbol = getNodeLinks(n).resolvedSymbol;
if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) {
if (referencedSymbol.valueDeclaration.kind === 126) {
if (referencedSymbol.valueDeclaration === node) {
error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name));
return;
}
if (referencedSymbol.valueDeclaration.pos < node.pos) {
return;
}
}
error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n));
}
}
else {
ts.forEachChild(n, visit);
}
}
}
function checkVariableLikeDeclaration(node) {
checkSourceElement(node.type);
if (node.name.kind === 124) {
checkComputedPropertyName(node.name);
if (node.initializer) {
checkExpressionCached(node.initializer);
}
}
if (ts.isBindingPattern(node.name)) {
ts.forEach(node.name.elements, checkSourceElement);
}
if (node.initializer && getRootDeclaration(node).kind === 126 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);
return;
}
if (ts.isBindingPattern(node.name)) {
if (node.initializer) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined);
checkParameterInitializer(node);
}
return;
}
var symbol = getSymbolOfNode(node);
var type = getTypeOfVariableOrParameterOrProperty(symbol);
if (node === symbol.valueDeclaration) {
if (node.initializer) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined);
checkParameterInitializer(node);
}
}
else {
var declarationType = getWidenedTypeForVariableLikeDeclaration(node);
if (type !== unknownType && declarationType !== unknownType && !isTypeIdenticalTo(type, declarationType)) {
error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(node.name), typeToString(type), typeToString(declarationType));
}
if (node.initializer) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined);
}
}
if (node.kind !== 128 && node.kind !== 127) {
checkExportsOnMergedDeclarations(node);
if (node.kind === 191 || node.kind === 148) {
checkVarDeclaredNamesNotShadowed(node);
}
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
}
}
function checkVariableDeclaration(node) {
checkGrammarVariableDeclaration(node);
return checkVariableLikeDeclaration(node);
}
function checkBindingElement(node) {
checkGrammarBindingElement(node);
return checkVariableLikeDeclaration(node);
}
function checkVariableStatement(node) {
checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) || checkGrammarModifiers(node) || checkGrammarVariableDeclarationList(node.declarationList) || checkGrammarForDisallowedLetOrConstStatement(node);
ts.forEach(node.declarationList.declarations, checkSourceElement);
}
function checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) {
if (node.modifiers) {
if (inBlockOrObjectLiteralExpression(node)) {
return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
}
}
}
function inBlockOrObjectLiteralExpression(node) {
while (node) {
if (node.kind === 172 || node.kind === 150) {
return true;
}
node = node.parent;
}
}
function checkExpressionStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
}
function checkIfStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
checkSourceElement(node.thenStatement);
checkSourceElement(node.elseStatement);
}
function checkDoStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkSourceElement(node.statement);
checkExpression(node.expression);
}
function checkWhileStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
checkSourceElement(node.statement);
}
function checkForStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.initializer && node.initializer.kind == 192) {
checkGrammarVariableDeclarationList(node.initializer);
}
}
if (node.initializer) {
if (node.initializer.kind === 192) {
ts.forEach(node.initializer.declarations, checkVariableDeclaration);
}
else {
checkExpression(node.initializer);
}
}
if (node.condition)
checkExpression(node.condition);
if (node.iterator)
checkExpression(node.iterator);
checkSourceElement(node.statement);
}
function checkForOfStatement(node) {
checkGrammarForOfStatement(node);
}
function checkForInStatement(node) {
checkGrammarForInOrForOfStatement(node);
if (node.initializer.kind === 192) {
var variableDeclarationList = node.initializer;
if (variableDeclarationList.declarations.length >= 1) {
var decl = variableDeclarationList.declarations[0];
checkVariableDeclaration(decl);
}
}
else {
var varExpr = node.initializer;
var exprType = checkExpression(varExpr);
if (!allConstituentTypesHaveKind(exprType, 1 | 258)) {
error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
}
else {
checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant);
}
}
var exprType = checkExpression(node.expression);
if (!allConstituentTypesHaveKind(exprType, 1 | 48128 | 512)) {
error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
checkSourceElement(node.statement);
}
function checkBreakOrContinueStatement(node) {
checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node);
}
function isGetAccessorWithAnnotatatedSetAccessor(node) {
return !!(node.kind === 132 && getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 133)));
}
function checkReturnStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
var functionBlock = ts.getContainingFunction(node);
if (!functionBlock) {
grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
}
}
if (node.expression) {
var func = ts.getContainingFunction(node);
if (func) {
var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
var exprType = checkExpressionCached(node.expression);
if (func.kind === 133) {
error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value);
}
else {
if (func.kind === 131) {
if (!isTypeAssignableTo(exprType, returnType)) {
error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
}
}
else if (func.type || isGetAccessorWithAnnotatatedSetAccessor(func)) {
checkTypeAssignableTo(exprType, returnType, node.expression, undefined);
}
}
}
}
}
function checkWithStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.parserContextFlags & 1) {
grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
}
}
checkExpression(node.expression);
error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any);
}
function checkSwitchStatement(node) {
checkGrammarStatementInAmbientContext(node);
var firstDefaultClause;
var hasDuplicateDefaultClause = false;
var expressionType = checkExpression(node.expression);
ts.forEach(node.clauses, function (clause) {
if (clause.kind === 204 && !hasDuplicateDefaultClause) {
if (firstDefaultClause === undefined) {
firstDefaultClause = clause;
}
else {
var sourceFile = ts.getSourceFileOfNode(node);
var start = ts.skipTrivia(sourceFile.text, clause.pos);
var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
hasDuplicateDefaultClause = true;
}
}
if (produceDiagnostics && clause.kind === 203) {
var caseClause = clause;
var caseType = checkExpression(caseClause.expression);
if (!isTypeAssignableTo(expressionType, caseType)) {
checkTypeAssignableTo(caseType, expressionType, caseClause.expression, undefined);
}
}
ts.forEach(clause.statements, checkSourceElement);
});
}
function checkLabeledStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
var current = node.parent;
while (current) {
if (ts.isAnyFunction(current)) {
break;
}
if (current.kind === 187 && current.label.text === node.label.text) {
var sourceFile = ts.getSourceFileOfNode(node);
grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label));
break;
}
current = current.parent;
}
}
checkSourceElement(node.statement);
}
function checkThrowStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.expression === undefined) {
grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here);
}
}
if (node.expression) {
checkExpression(node.expression);
}
}
function checkTryStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkBlock(node.tryBlock);
var catchClause = node.catchClause;
if (catchClause) {
if (catchClause.type) {
var sourceFile = ts.getSourceFileOfNode(node);
var colonStart = ts.skipTrivia(sourceFile.text, catchClause.name.end);
grammarErrorAtPos(sourceFile, colonStart, ":".length, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation);
}
checkGrammarEvalOrArgumentsInStrictMode(node, catchClause.name);
checkBlock(catchClause.block);
}
if (node.finallyBlock)
checkBlock(node.finallyBlock);
}
function checkIndexConstraints(type) {
var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1);
var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0);
var stringIndexType = getIndexTypeOfType(type, 0);
var numberIndexType = getIndexTypeOfType(type, 1);
if (stringIndexType || numberIndexType) {
ts.forEach(getPropertiesOfObjectType(type), function (prop) {
var propType = getTypeOfSymbol(prop);
checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0);
checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1);
});
if (type.flags & 1024 && type.symbol.valueDeclaration.kind === 194) {
var classDeclaration = type.symbol.valueDeclaration;
for (var i = 0; i < classDeclaration.members.length; i++) {
var member = classDeclaration.members[i];
if (!(member.flags & 128) && ts.hasDynamicName(member)) {
var propType = getTypeOfSymbol(member.symbol);
checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0);
checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1);
}
}
}
}
var errorNode;
if (stringIndexType && numberIndexType) {
errorNode = declaredNumberIndexer || declaredStringIndexer;
if (!errorNode && (type.flags & 2048)) {
var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); });
errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0];
}
}
if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
}
function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
if (!indexType) {
return;
}
if (indexKind === 1 && !isNumericName(prop.valueDeclaration.name)) {
return;
}
var errorNode;
if (prop.valueDeclaration.name.kind === 124 || prop.parent === containingType.symbol) {
errorNode = prop.valueDeclaration;
}
else if (indexDeclaration) {
errorNode = indexDeclaration;
}
else if (containingType.flags & 2048) {
var someBaseClassHasBothPropertyAndIndexer = ts.forEach(containingType.baseTypes, function (base) { return getPropertyOfObjectType(base, prop.name) && getIndexTypeOfType(base, indexKind); });
errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0];
}
if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
var errorMessage = indexKind === 0 ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
}
}
}
function checkTypeNameIsReserved(name, message) {
switch (name.text) {
case "any":
case "number":
case "boolean":
case "string":
case "symbol":
case "void":
error(name, message, name.text);
}
}
function checkTypeParameters(typeParameterDeclarations) {
if (typeParameterDeclarations) {
for (var i = 0; i < typeParameterDeclarations.length; i++) {
var node = typeParameterDeclarations[i];
checkTypeParameter(node);
if (produceDiagnostics) {
for (var j = 0; j < i; j++) {
if (typeParameterDeclarations[j].symbol === node.symbol) {
error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name));
}
}
}
}
}
}
function checkClassDeclaration(node) {
checkGrammarClassDeclarationHeritageClauses(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
checkTypeParameters(node.typeParameters);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
var type = getDeclaredTypeOfSymbol(symbol);
var staticType = getTypeOfSymbol(symbol);
var baseTypeNode = ts.getClassBaseTypeNode(node);
if (baseTypeNode) {
emitExtends = emitExtends || !ts.isInAmbientContext(node);
checkTypeReference(baseTypeNode);
}
if (type.baseTypes.length) {
if (produceDiagnostics) {
var baseType = type.baseTypes[0];
checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
var staticBaseType = getTypeOfSymbol(baseType.symbol);
checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
if (baseType.symbol !== resolveEntityName(node, baseTypeNode.typeName, 107455)) {
error(baseTypeNode, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType));
}
checkKindsOfPropertyMemberOverrides(type, baseType);
}
checkExpressionOrQualifiedName(baseTypeNode.typeName);
}
var implementedTypeNodes = ts.getClassImplementedTypeNodes(node);
if (implementedTypeNodes) {
ts.forEach(implementedTypeNodes, function (typeRefNode) {
checkTypeReference(typeRefNode);
if (produceDiagnostics) {
var t = getTypeFromTypeReferenceNode(typeRefNode);
if (t !== unknownType) {
var declaredType = (t.flags & 4096) ? t.target : t;
if (declaredType.flags & (1024 | 2048)) {
checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1);
}
else {
error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface);
}
}
}
});
}
ts.forEach(node.members, checkSourceElement);
if (produceDiagnostics) {
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
}
}
function getTargetSymbol(s) {
return s.flags & 16777216 ? getSymbolLinks(s).target : s;
}
function checkKindsOfPropertyMemberOverrides(type, baseType) {
var baseProperties = getPropertiesOfObjectType(baseType);
for (var i = 0, len = baseProperties.length; i < len; ++i) {
var base = getTargetSymbol(baseProperties[i]);
if (base.flags & 134217728) {
continue;
}
var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name));
if (derived) {
var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base);
var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived);
if ((baseDeclarationFlags & 32) || (derivedDeclarationFlags & 32)) {
continue;
}
if ((baseDeclarationFlags & 128) !== (derivedDeclarationFlags & 128)) {
continue;
}
if ((base.flags & derived.flags & 8192) || ((base.flags & 98308) && (derived.flags & 98308))) {
continue;
}
var errorMessage;
if (base.flags & 8192) {
if (derived.flags & 98304) {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
}
else {
ts.Debug.assert((derived.flags & 4) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
}
}
else if (base.flags & 4) {
ts.Debug.assert((derived.flags & 8192) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
}
else {
ts.Debug.assert((base.flags & 98304) !== 0);
ts.Debug.assert((derived.flags & 8192) !== 0);
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
}
error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type));
}
}
}
function isAccessor(kind) {
return kind === 132 || kind === 133;
}
function areTypeParametersIdentical(list1, list2) {
if (!list1 && !list2) {
return true;
}
if (!list1 || !list2 || list1.length !== list2.length) {
return false;
}
for (var i = 0, len = list1.length; i < len; i++) {
var tp1 = list1[i];
var tp2 = list2[i];
if (tp1.name.text !== tp2.name.text) {
return false;
}
if (!tp1.constraint && !tp2.constraint) {
continue;
}
if (!tp1.constraint || !tp2.constraint) {
return false;
}
if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) {
return false;
}
}
return true;
}
function checkInheritedPropertiesAreIdentical(type, typeNode) {
if (!type.baseTypes.length || type.baseTypes.length === 1) {
return true;
}
var seen = {};
ts.forEach(type.declaredProperties, function (p) {
seen[p.name] = { prop: p, containingType: type };
});
var ok = true;
for (var i = 0, len = type.baseTypes.length; i < len; ++i) {
var base = type.baseTypes[i];
var properties = getPropertiesOfObjectType(base);
for (var j = 0, proplen = properties.length; j < proplen; ++j) {
var prop = properties[j];
if (!ts.hasProperty(seen, prop.name)) {
seen[prop.name] = { prop: prop, containingType: base };
}
else {
var existing = seen[prop.name];
var isInheritedProperty = existing.containingType !== type;
if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) {
ok = false;
var typeName1 = typeToString(existing.containingType);
var typeName2 = typeToString(base);
var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2);
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2);
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo));
}
}
}
}
return ok;
}
function checkInterfaceDeclaration(node) {
checkGrammarModifiers(node) || checkGrammarInterfaceDeclaration(node);
checkTypeParameters(node.typeParameters);
if (produceDiagnostics) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 195);
if (symbol.declarations.length > 1) {
if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) {
error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters);
}
}
if (node === firstInterfaceDecl) {
var type = getDeclaredTypeOfSymbol(symbol);
if (checkInheritedPropertiesAreIdentical(type, node.name)) {
ts.forEach(type.baseTypes, function (baseType) {
checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1);
});
checkIndexConstraints(type);
}
}
}
ts.forEach(ts.getInterfaceBaseTypeNodes(node), checkTypeReference);
ts.forEach(node.members, checkSourceElement);
if (produceDiagnostics) {
checkTypeForDuplicateIndexSignatures(node);
}
}
function checkTypeAliasDeclaration(node) {
checkGrammarModifiers(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
checkSourceElement(node.type);
}
function computeEnumMemberValues(node) {
var nodeLinks = getNodeLinks(node);
if (!(nodeLinks.flags & 128)) {
var enumSymbol = getSymbolOfNode(node);
var enumType = getDeclaredTypeOfSymbol(enumSymbol);
var autoValue = 0;
var ambient = ts.isInAmbientContext(node);
var enumIsConst = ts.isConst(node);
ts.forEach(node.members, function (member) {
if (member.name.kind !== 124 && isNumericLiteralName(member.name.text)) {
error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
var initializer = member.initializer;
if (initializer) {
autoValue = getConstantValueForEnumMemberInitializer(initializer, enumIsConst);
if (autoValue === undefined) {
if (enumIsConst) {
error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
}
else if (!ambient) {
checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined);
}
}
else if (enumIsConst) {
if (isNaN(autoValue)) {
error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN);
}
else if (!isFinite(autoValue)) {
error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
}
}
}
else if (ambient && !enumIsConst) {
autoValue = undefined;
}
if (autoValue !== undefined) {
getNodeLinks(member).enumMemberValue = autoValue++;
}
});
nodeLinks.flags |= 128;
}
function getConstantValueForEnumMemberInitializer(initializer, enumIsConst) {
return evalConstant(initializer);
function evalConstant(e) {
switch (e.kind) {
case 163:
var value = evalConstant(e.operand);
if (value === undefined) {
return undefined;
}
switch (e.operator) {
case 33: return value;
case 34: return -value;
case 47: return enumIsConst ? ~value : undefined;
}
return undefined;
case 165:
if (!enumIsConst) {
return undefined;
}
var left = evalConstant(e.left);
if (left === undefined) {
return undefined;
}
var right = evalConstant(e.right);
if (right === undefined) {
return undefined;
}
switch (e.operatorToken.kind) {
case 44: return left | right;
case 43: return left & right;
case 41: return left >> right;
case 42: return left >>> right;
case 40: return left << right;
case 45: return left ^ right;
case 35: return left * right;
case 36: return left / right;
case 33: return left + right;
case 34: return left - right;
case 37: return left % right;
}
return undefined;
case 7:
return +e.text;
case 157:
return enumIsConst ? evalConstant(e.expression) : undefined;
case 64:
case 152:
case 151:
if (!enumIsConst) {
return undefined;
}
var member = initializer.parent;
var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent));
var enumType;
var propertyName;
if (e.kind === 64) {
enumType = currentType;
propertyName = e.text;
}
else {
if (e.kind === 152) {
if (e.argumentExpression === undefined ||
e.argumentExpression.kind !== 8) {
return undefined;
}
var enumType = getTypeOfNode(e.expression);
propertyName = e.argumentExpression.text;
}
else {
var enumType = getTypeOfNode(e.expression);
propertyName = e.name.text;
}
if (enumType !== currentType) {
return undefined;
}
}
if (propertyName === undefined) {
return undefined;
}
var property = getPropertyOfObjectType(enumType, propertyName);
if (!property || !(property.flags & 8)) {
return undefined;
}
var propertyDecl = property.valueDeclaration;
if (member === propertyDecl) {
return undefined;
}
if (!isDefinedBefore(propertyDecl, member)) {
return undefined;
}
return getNodeLinks(propertyDecl).enumMemberValue;
}
}
}
}
function checkEnumDeclaration(node) {
if (!produceDiagnostics) {
return;
}
checkGrammarModifiers(node) || checkGrammarEnumDeclaration(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
computeEnumMemberValues(node);
var enumSymbol = getSymbolOfNode(node);
var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind);
if (node === firstDeclaration) {
if (enumSymbol.declarations.length > 1) {
var enumIsConst = ts.isConst(node);
ts.forEach(enumSymbol.declarations, function (decl) {
if (ts.isConstEnumDeclaration(decl) !== enumIsConst) {
error(decl.name, ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
}
});
}
var seenEnumMissingInitialInitializer = false;
ts.forEach(enumSymbol.declarations, function (declaration) {
if (declaration.kind !== 197) {
return false;
}
var enumDeclaration = declaration;
if (!enumDeclaration.members.length) {
return false;
}
var firstEnumMember = enumDeclaration.members[0];
if (!firstEnumMember.initializer) {
if (seenEnumMissingInitialInitializer) {
error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element);
}
else {
seenEnumMissingInitialInitializer = true;
}
}
});
}
}
function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
var declarations = symbol.declarations;
for (var i = 0; i < declarations.length; i++) {
var declaration = declarations[i];
if ((declaration.kind === 194 || (declaration.kind === 193 && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) {
return declaration;
}
}
return undefined;
}
function checkModuleDeclaration(node) {
if (produceDiagnostics) {
if (!checkGrammarModifiers(node)) {
if (!ts.isInAmbientContext(node) && node.name.kind === 8) {
grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
}
else if (node.name.kind === 64 && node.body.kind === 199) {
var statements = node.body.statements;
for (var i = 0, n = statements.length; i < n; i++) {
var statement = statements[i];
if (statement.kind === 201) {
grammarErrorOnNode(statement, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module);
}
else if (ts.isExternalModuleImportDeclaration(statement)) {
grammarErrorOnNode(ts.getExternalModuleImportDeclarationExpression(statement), ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module);
}
}
}
}
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
if (symbol.flags & 512 && symbol.declarations.length > 1 && !ts.isInAmbientContext(node) && ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums)) {
var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol);
if (classOrFunc) {
if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) {
error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged);
}
else if (node.pos < classOrFunc.pos) {
error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
}
}
}
if (node.name.kind === 8) {
if (!isGlobalSourceFile(node.parent)) {
error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules);
}
if (isExternalModuleNameRelative(node.name.text)) {
error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name);
}
}
}
checkSourceElement(node.body);
}
function getFirstIdentifier(node) {
while (node.kind === 123) {
node = node.left;
}
return node;
}
function checkImportDeclaration(node) {
checkGrammarModifiers(node);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
var symbol = getSymbolOfNode(node);
var target;
if (ts.isInternalModuleImportDeclaration(node)) {
target = resolveImport(symbol);
if (target !== unknownSymbol) {
if (target.flags & 107455) {
var moduleName = getFirstIdentifier(node.moduleReference);
if (resolveEntityName(node, moduleName, 107455 | 1536).flags & 1536) {
checkExpressionOrQualifiedName(node.moduleReference);
}
else {
error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName));
}
}
if (target.flags & 793056) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
}
}
}
else {
if (node.parent.kind === 210) {
target = resolveImport(symbol);
}
else if (node.parent.kind === 199 && node.parent.parent.name.kind === 8) {
if (ts.getExternalModuleImportDeclarationExpression(node).kind === 8) {
if (isExternalModuleNameRelative(ts.getExternalModuleImportDeclarationExpression(node).text)) {
error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name);
target = unknownSymbol;
}
else {
target = resolveImport(symbol);
}
}
else {
target = unknownSymbol;
}
}
else {
target = unknownSymbol;
}
}
if (target !== unknownSymbol) {
var excludedMeanings = (symbol.flags & 107455 ? 107455 : 0) |
(symbol.flags & 793056 ? 793056 : 0) |
(symbol.flags & 1536 ? 1536 : 0);
if (target.flags & excludedMeanings) {
error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol));
}
}
}
function checkExportAssignment(node) {
if (!checkGrammarModifiers(node) && (node.flags & 243)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
}
var container = node.parent;
if (container.kind !== 210) {
container = container.parent;
}
checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container));
}
function checkSourceElement(node) {
if (!node)
return;
switch (node.kind) {
case 125:
return checkTypeParameter(node);
case 126:
return checkParameter(node);
case 128:
case 127:
return checkPropertyDeclaration(node);
case 138:
case 139:
case 134:
case 135:
return checkSignatureDeclaration(node);
case 136:
return checkSignatureDeclaration(node);
case 130:
case 129:
return checkMethodDeclaration(node);
case 131:
return checkConstructorDeclaration(node);
case 132:
case 133:
return checkAccessorDeclaration(node);
case 137:
return checkTypeReference(node);
case 140:
return checkTypeQuery(node);
case 141:
return checkTypeLiteral(node);
case 142:
return checkArrayType(node);
case 143:
return checkTupleType(node);
case 144:
return checkUnionType(node);
case 145:
return checkSourceElement(node.type);
case 193:
return checkFunctionDeclaration(node);
case 172:
case 199:
return checkBlock(node);
case 173:
return checkVariableStatement(node);
case 175:
return checkExpressionStatement(node);
case 176:
return checkIfStatement(node);
case 177:
return checkDoStatement(node);
case 178:
return checkWhileStatement(node);
case 179:
return checkForStatement(node);
case 180:
return checkForInStatement(node);
case 181:
return checkForOfStatement(node);
case 182:
case 183:
return checkBreakOrContinueStatement(node);
case 184:
return checkReturnStatement(node);
case 185:
return checkWithStatement(node);
case 186:
return checkSwitchStatement(node);
case 187:
return checkLabeledStatement(node);
case 188:
return checkThrowStatement(node);
case 189:
return checkTryStatement(node);
case 191:
return checkVariableDeclaration(node);
case 148:
return checkBindingElement(node);
case 194:
return checkClassDeclaration(node);
case 195:
return checkInterfaceDeclaration(node);
case 196:
return checkTypeAliasDeclaration(node);
case 197:
return checkEnumDeclaration(node);
case 198:
return checkModuleDeclaration(node);
case 200:
return checkImportDeclaration(node);
case 201:
return checkExportAssignment(node);
case 174:
checkGrammarStatementInAmbientContext(node);
return;
case 190:
checkGrammarStatementInAmbientContext(node);
return;
}
}
function checkFunctionExpressionBodies(node) {
switch (node.kind) {
case 158:
case 159:
ts.forEach(node.parameters, checkFunctionExpressionBodies);
checkFunctionExpressionOrObjectLiteralMethodBody(node);
break;
case 130:
case 129:
ts.forEach(node.parameters, checkFunctionExpressionBodies);
if (ts.isObjectLiteralMethod(node)) {
checkFunctionExpressionOrObjectLiteralMethodBody(node);
}
break;
case 131:
case 132:
case 133:
case 193:
ts.forEach(node.parameters, checkFunctionExpressionBodies);
break;
case 185:
checkFunctionExpressionBodies(node.expression);
break;
case 126:
case 128:
case 127:
case 146:
case 147:
case 148:
case 149:
case 150:
case 207:
case 151:
case 152:
case 153:
case 154:
case 155:
case 167:
case 171:
case 156:
case 157:
case 161:
case 162:
case 160:
case 163:
case 164:
case 165:
case 166:
case 169:
case 172:
case 199:
case 173:
case 175:
case 176:
case 177:
case 178:
case 179:
case 180:
case 181:
case 182:
case 183:
case 184:
case 186:
case 203:
case 204:
case 187:
case 188:
case 189:
case 206:
case 191:
case 192:
case 194:
case 197:
case 209:
case 210:
ts.forEachChild(node, checkFunctionExpressionBodies);
break;
}
}
function checkSourceFile(node) {
var start = new Date().getTime();
checkSourceFileWorker(node);
ts.checkTime += new Date().getTime() - start;
}
function checkSourceFileWorker(node) {
var links = getNodeLinks(node);
if (!(links.flags & 1)) {
checkGrammarSourceFile(node);
emitExtends = false;
potentialThisCollisions.length = 0;
ts.forEach(node.statements, checkSourceElement);
checkFunctionExpressionBodies(node);
if (ts.isExternalModule(node)) {
var symbol = getExportAssignmentSymbol(node.symbol);
if (symbol && symbol.flags & 8388608) {
getSymbolLinks(symbol).referenced = true;
markLinkedImportsAsReferenced(ts.getDeclarationOfKind(symbol, 200));
}
}
if (potentialThisCollisions.length) {
ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope);
potentialThisCollisions.length = 0;
}
if (emitExtends) {
links.flags |= 8;
}
links.flags |= 1;
}
}
function getDiagnostics(sourceFile) {
throwIfNonDiagnosticsProducing();
if (sourceFile) {
checkSourceFile(sourceFile);
return diagnostics.getDiagnostics(sourceFile.fileName);
}
ts.forEach(host.getSourceFiles(), checkSourceFile);
return diagnostics.getDiagnostics();
}
function getGlobalDiagnostics() {
throwIfNonDiagnosticsProducing();
return diagnostics.getGlobalDiagnostics();
}
function throwIfNonDiagnosticsProducing() {
if (!produceDiagnostics) {
throw new Error("Trying to get diagnostics from a type checker that does not produce them.");
}
}
function isInsideWithStatementBody(node) {
if (node) {
while (node.parent) {
if (node.parent.kind === 185 && node.parent.statement === node) {
return true;
}
node = node.parent;
}
}
return false;
}
function getSymbolsInScope(location, meaning) {
var symbols = {};
var memberFlags = 0;
function copySymbol(symbol, meaning) {
if (symbol.flags & meaning) {
var id = symbol.name;
if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) {
symbols[id] = symbol;
}
}
}
function copySymbols(source, meaning) {
if (meaning) {
for (var id in source) {
if (ts.hasProperty(source, id)) {
copySymbol(source[id], meaning);
}
}
}
}
if (isInsideWithStatementBody(location)) {
return [];
}
while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
copySymbols(location.locals, meaning);
}
switch (location.kind) {
case 210:
if (!ts.isExternalModule(location))
break;
case 198:
copySymbols(getSymbolOfNode(location).exports, meaning & 8914931);
break;
case 197:
copySymbols(getSymbolOfNode(location).exports, meaning & 8);
break;
case 194:
case 195:
if (!(memberFlags & 128)) {
copySymbols(getSymbolOfNode(location).members, meaning & 793056);
}
break;
case 158:
if (location.name) {
copySymbol(location.symbol, meaning);
}
break;
case 206:
if (location.name.text) {
copySymbol(location.symbol, meaning);
}
break;
}
memberFlags = location.flags;
location = location.parent;
}
copySymbols(globals, meaning);
return ts.mapToArray(symbols);
}
function isTypeDeclarationName(name) {
return name.kind == 64 &&
isTypeDeclaration(name.parent) &&
name.parent.name === name;
}
function isTypeDeclaration(node) {
switch (node.kind) {
case 125:
case 194:
case 195:
case 196:
case 197:
return true;
}
}
function isTypeReferenceIdentifier(entityName) {
var node = entityName;
while (node.parent && node.parent.kind === 123)
node = node.parent;
return node.parent && node.parent.kind === 137;
}
function isTypeNode(node) {
if (137 <= node.kind && node.kind <= 145) {
return true;
}
switch (node.kind) {
case 110:
case 117:
case 119:
case 111:
case 120:
return true;
case 98:
return node.parent.kind !== 162;
case 8:
return node.parent.kind === 126;
case 64:
if (node.parent.kind === 123 && node.parent.right === node) {
node = node.parent;
}
case 123:
ts.Debug.assert(node.kind === 64 || node.kind === 123, "'node' was expected to be a qualified name or identifier in 'isTypeNode'.");
var parent = node.parent;
if (parent.kind === 140) {
return false;
}
if (137 <= parent.kind && parent.kind <= 145) {
return true;
}
switch (parent.kind) {
case 125:
return node === parent.constraint;
case 128:
case 127:
case 126:
case 191:
return node === parent.type;
case 193:
case 158:
case 159:
case 131:
case 130:
case 129:
case 132:
case 133:
return node === parent.type;
case 134:
case 135:
case 136:
return node === parent.type;
case 156:
return node === parent.type;
case 153:
case 154:
return parent.typeArguments && ts.indexOf(parent.typeArguments, node) >= 0;
case 155:
return false;
}
}
return false;
}
function getLeftSideOfImportOrExportAssignment(nodeOnRightSide) {
while (nodeOnRightSide.parent.kind === 123) {
nodeOnRightSide = nodeOnRightSide.parent;
}
if (nodeOnRightSide.parent.kind === 200) {
return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent;
}
if (nodeOnRightSide.parent.kind === 201) {
return nodeOnRightSide.parent.exportName === nodeOnRightSide && nodeOnRightSide.parent;
}
return undefined;
}
function isInRightSideOfImportOrExportAssignment(node) {
return getLeftSideOfImportOrExportAssignment(node) !== undefined;
}
function isRightSideOfQualifiedNameOrPropertyAccess(node) {
return (node.parent.kind === 123 && node.parent.right === node) ||
(node.parent.kind === 151 && node.parent.name === node);
}
function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) {
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(entityName)) {
return getSymbolOfNode(entityName.parent);
}
if (entityName.parent.kind === 201) {
return resolveEntityName(entityName.parent.parent, entityName, 107455 | 793056 | 1536 | 8388608);
}
if (entityName.kind !== 151) {
if (isInRightSideOfImportOrExportAssignment(entityName)) {
return getSymbolOfPartOfRightHandSideOfImport(entityName);
}
}
if (isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (ts.isExpression(entityName)) {
if (ts.getFullWidth(entityName) === 0) {
return undefined;
}
if (entityName.kind === 64) {
var meaning = 107455 | 8388608;
return resolveEntityName(entityName, entityName, meaning);
}
else if (entityName.kind === 151) {
var symbol = getNodeLinks(entityName).resolvedSymbol;
if (!symbol) {
checkPropertyAccessExpression(entityName);
}
return getNodeLinks(entityName).resolvedSymbol;
}
else if (entityName.kind === 123) {
var symbol = getNodeLinks(entityName).resolvedSymbol;
if (!symbol) {
checkQualifiedName(entityName);
}
return getNodeLinks(entityName).resolvedSymbol;
}
}
else if (isTypeReferenceIdentifier(entityName)) {
var meaning = entityName.parent.kind === 137 ? 793056 : 1536;
meaning |= 8388608;
return resolveEntityName(entityName, entityName, meaning);
}
return undefined;
}
function getSymbolInfo(node) {
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return getSymbolOfNode(node.parent);
}
if (node.kind === 64 && isInRightSideOfImportOrExportAssignment(node)) {
return node.parent.kind === 201 ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImport(node);
}
switch (node.kind) {
case 64:
case 151:
case 123:
return getSymbolOfEntityNameOrPropertyAccessExpression(node);
case 92:
case 90:
var type = checkExpression(node);
return type.symbol;
case 112:
var constructorDeclaration = node.parent;
if (constructorDeclaration && constructorDeclaration.kind === 131) {
return constructorDeclaration.parent.symbol;
}
return undefined;
case 8:
if (ts.isExternalModuleImportDeclaration(node.parent.parent) &&
ts.getExternalModuleImportDeclarationExpression(node.parent.parent) === node) {
var importSymbol = getSymbolOfNode(node.parent.parent);
var moduleType = getTypeOfSymbol(importSymbol);
return moduleType ? moduleType.symbol : undefined;
}
case 7:
if (node.parent.kind == 152 && node.parent.argumentExpression === node) {
var objectType = checkExpression(node.parent.expression);
if (objectType === unknownType)
return undefined;
var apparentType = getApparentType(objectType);
if (apparentType === unknownType)
return undefined;
return getPropertyOfType(apparentType, node.text);
}
break;
}
return undefined;
}
function getShorthandAssignmentValueSymbol(location) {
if (location && location.kind === 208) {
return resolveEntityName(location, location.name, 107455);
}
return undefined;
}
function getTypeOfNode(node) {
if (isInsideWithStatementBody(node)) {
return unknownType;
}
if (ts.isExpression(node)) {
return getTypeOfExpression(node);
}
if (isTypeNode(node)) {
return getTypeFromTypeNode(node);
}
if (isTypeDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getDeclaredTypeOfSymbol(symbol);
}
if (isTypeDeclarationName(node)) {
var symbol = getSymbolInfo(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
}
if (ts.isDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getTypeOfSymbol(symbol);
}
if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
var symbol = getSymbolInfo(node);
return symbol && getTypeOfSymbol(symbol);
}
if (isInRightSideOfImportOrExportAssignment(node)) {
var symbol = getSymbolInfo(node);
var declaredType = symbol && getDeclaredTypeOfSymbol(symbol);
return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol);
}
return unknownType;
}
function getTypeOfExpression(expr) {
if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
expr = expr.parent;
}
return checkExpression(expr);
}
function getAugmentedPropertiesOfType(type) {
var type = getApparentType(type);
var propsByName = createSymbolTable(getPropertiesOfType(type));
if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) {
ts.forEach(getPropertiesOfType(globalFunctionType), function (p) {
if (!ts.hasProperty(propsByName, p.name)) {
propsByName[p.name] = p;
}
});
}
return getNamedMembers(propsByName);
}
function getRootSymbols(symbol) {
if (symbol.flags & 268435456) {
var symbols = [];
var name = symbol.name;
ts.forEach(getSymbolLinks(symbol).unionType.types, function (t) {
symbols.push(getPropertyOfType(t, name));
});
return symbols;
}
else if (symbol.flags & 67108864) {
var target = getSymbolLinks(symbol).target;
if (target) {
return [target];
}
}
return [symbol];
}
function isExternalModuleSymbol(symbol) {
return symbol.flags & 512 && symbol.declarations.length === 1 && symbol.declarations[0].kind === 210;
}
function isNodeDescendentOf(node, ancestor) {
while (node) {
if (node === ancestor)
return true;
node = node.parent;
}
return false;
}
function isUniqueLocalName(name, container) {
for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) {
if (node.locals && ts.hasProperty(node.locals, name)) {
var symbolWithRelevantName = node.locals[name];
if (symbolWithRelevantName.flags & (107455 | 1048576)) {
return false;
}
if (symbolWithRelevantName.flags & 8388608) {
var importDeclarationWithRelevantName = ts.getDeclarationOfKind(symbolWithRelevantName, 200);
if (isReferencedImportDeclaration(importDeclarationWithRelevantName)) {
return false;
}
}
}
}
return true;
}
function getLocalNameOfContainer(container) {
var links = getNodeLinks(container);
if (!links.localModuleName) {
var prefix = "";
var name = ts.unescapeIdentifier(container.name.text);
while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) {
prefix += "_";
}
links.localModuleName = prefix + ts.getTextOfNode(container.name);
}
return links.localModuleName;
}
function getLocalNameForSymbol(symbol, location) {
var node = location;
while (node) {
if ((node.kind === 198 || node.kind === 197) && getSymbolOfNode(node) === symbol) {
return getLocalNameOfContainer(node);
}
node = node.parent;
}
ts.Debug.fail("getLocalNameForSymbol failed");
}
function getExpressionNamePrefix(node) {
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol) {
var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
if (symbol !== exportSymbol && !(exportSymbol.flags & 944)) {
symbol = exportSymbol;
}
if (symbol.parent) {
return isExternalModuleSymbol(symbol.parent) ? "exports" : getLocalNameForSymbol(getParentOfSymbol(symbol), node.parent);
}
}
}
function getExportAssignmentName(node) {
var symbol = getExportAssignmentSymbol(getSymbolOfNode(node));
return symbol && symbolIsValue(symbol) && !isConstEnumSymbol(symbol) ? symbolToString(symbol) : undefined;
}
function isTopLevelValueImportWithEntityName(node) {
if (node.parent.kind !== 210 || !ts.isInternalModuleImportDeclaration(node)) {
return false;
}
return isImportResolvedToValue(getSymbolOfNode(node));
}
function isImportResolvedToValue(symbol) {
var target = resolveImport(symbol);
return target !== unknownSymbol && target.flags & 107455 && !isConstEnumOrConstEnumOnlyModule(target);
}
function isConstEnumOrConstEnumOnlyModule(s) {
return isConstEnumSymbol(s) || s.constEnumOnlyModule;
}
function isReferencedImportDeclaration(node) {
var symbol = getSymbolOfNode(node);
if (getSymbolLinks(symbol).referenced) {
return true;
}
if (node.flags & 1) {
return isImportResolvedToValue(symbol);
}
return false;
}
function isImplementationOfOverload(node) {
if (ts.nodeIsPresent(node.body)) {
var symbol = getSymbolOfNode(node);
var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
return signaturesOfSymbol.length > 1 ||
(signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
}
return false;
}
function getNodeCheckFlags(node) {
return getNodeLinks(node).flags;
}
function getEnumMemberValue(node) {
computeEnumMemberValues(node.parent);
return getNodeLinks(node).enumMemberValue;
}
function getConstantValue(node) {
if (node.kind === 209) {
return getEnumMemberValue(node);
}
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol && (symbol.flags & 8)) {
var declaration = symbol.valueDeclaration;
var constantValue;
if (declaration.kind === 209) {
return getEnumMemberValue(declaration);
}
}
return undefined;
}
function writeTypeOfDeclaration(declaration, enclosingDeclaration, flags, writer) {
var symbol = getSymbolOfNode(declaration);
var type = symbol && !(symbol.flags & (2048 | 131072)) ? getTypeOfSymbol(symbol) : unknownType;
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
}
function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) {
var signature = getSignatureFromDeclaration(signatureDeclaration);
getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
}
function isUnknownIdentifier(location, name) {
return !resolveName(location, name, 107455, undefined, undefined);
}
function createResolver() {
return {
getLocalNameOfContainer: getLocalNameOfContainer,
getExpressionNamePrefix: getExpressionNamePrefix,
getExportAssignmentName: getExportAssignmentName,
isReferencedImportDeclaration: isReferencedImportDeclaration,
getNodeCheckFlags: getNodeCheckFlags,
isTopLevelValueImportWithEntityName: isTopLevelValueImportWithEntityName,
isDeclarationVisible: isDeclarationVisible,
isImplementationOfOverload: isImplementationOfOverload,
writeTypeOfDeclaration: writeTypeOfDeclaration,
writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration,
isSymbolAccessible: isSymbolAccessible,
isEntityNameVisible: isEntityNameVisible,
getConstantValue: getConstantValue,
isUnknownIdentifier: isUnknownIdentifier
};
}
function initializeTypeChecker() {
ts.forEach(host.getSourceFiles(), function (file) {
ts.bindSourceFile(file);
});
ts.forEach(host.getSourceFiles(), function (file) {
if (!ts.isExternalModule(file)) {
extendSymbolTable(globals, file.locals);
}
});
getSymbolLinks(undefinedSymbol).type = undefinedType;
getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments");
getSymbolLinks(unknownSymbol).type = unknownType;
globals[undefinedSymbol.name] = undefinedSymbol;
globalArraySymbol = getGlobalTypeSymbol("Array");
globalArrayType = getTypeOfGlobalSymbol(globalArraySymbol, 1);
globalObjectType = getGlobalType("Object");
globalFunctionType = getGlobalType("Function");
globalStringType = getGlobalType("String");
globalNumberType = getGlobalType("Number");
globalBooleanType = getGlobalType("Boolean");
globalRegExpType = getGlobalType("RegExp");
if (languageVersion >= 2) {
globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
globalESSymbolType = getGlobalType("Symbol");
globalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol");
}
else {
globalTemplateStringsArrayType = unknownType;
globalESSymbolType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
globalESSymbolConstructorSymbol = undefined;
}
anyArrayType = createArrayType(anyType);
}
function checkGrammarModifiers(node) {
switch (node.kind) {
case 132:
case 133:
case 131:
case 128:
case 127:
case 130:
case 129:
case 136:
case 194:
case 195:
case 198:
case 197:
case 201:
case 173:
case 193:
case 196:
case 200:
case 126:
break;
default:
return false;
}
if (!node.modifiers) {
return;
}
var lastStatic, lastPrivate, lastProtected, lastDeclare;
var flags = 0;
for (var i = 0, n = node.modifiers.length; i < n; i++) {
var modifier = node.modifiers[i];
switch (modifier.kind) {
case 107:
case 106:
case 105:
var text;
if (modifier.kind === 107) {
text = "public";
}
else if (modifier.kind === 106) {
text = "protected";
lastProtected = modifier;
}
else {
text = "private";
lastPrivate = modifier;
}
if (flags & 112) {
return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
}
else if (flags & 128) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static");
}
else if (node.parent.kind === 199 || node.parent.kind === 210) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, text);
}
flags |= ts.modifierToFlag(modifier.kind);
break;
case 108:
if (flags & 128) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
}
else if (node.parent.kind === 199 || node.parent.kind === 210) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static");
}
else if (node.kind === 126) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
}
flags |= 128;
lastStatic = modifier;
break;
case 77:
if (flags & 1) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
}
else if (flags & 2) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare");
}
else if (node.parent.kind === 194) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
}
else if (node.kind === 126) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
}
flags |= 1;
break;
case 113:
if (flags & 2) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
}
else if (node.parent.kind === 194) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
}
else if (node.kind === 126) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
}
else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 199) {
return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
}
flags |= 2;
lastDeclare = modifier;
break;
}
}
if (node.kind === 131) {
if (flags & 128) {
return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
}
else if (flags & 64) {
return grammarErrorOnNode(lastProtected, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "protected");
}
else if (flags & 32) {
return grammarErrorOnNode(lastPrivate, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private");
}
}
else if (node.kind === 200 && flags & 2) {
return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare");
}
else if (node.kind === 195 && flags & 2) {
return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare");
}
else if (node.kind === 126 && (flags & 112) && ts.isBindingPattern(node.name)) {
return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern);
}
}
function checkGrammarForDisallowedTrailingComma(list) {
if (list && list.hasTrailingComma) {
var start = list.end - ",".length;
var end = list.end;
var sourceFile = ts.getSourceFileOfNode(list[0]);
return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Trailing_comma_not_allowed);
}
}
function checkGrammarTypeParameterList(node, typeParameters) {
if (checkGrammarForDisallowedTrailingComma(typeParameters)) {
return true;
}
if (typeParameters && typeParameters.length === 0) {
var start = typeParameters.pos - "<".length;
var sourceFile = ts.getSourceFileOfNode(node);
var end = ts.skipTrivia(sourceFile.text, typeParameters.end) + ">".length;
return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty);
}
}
function checkGrammarParameterList(parameters) {
if (checkGrammarForDisallowedTrailingComma(parameters)) {
return true;
}
var seenOptionalParameter = false;
var parameterCount = parameters.length;
for (var i = 0; i < parameterCount; i++) {
var parameter = parameters[i];
if (parameter.dotDotDotToken) {
if (i !== (parameterCount - 1)) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
}
if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_rest_parameter_cannot_be_optional);
}
if (parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer);
}
}
else if (parameter.questionToken || parameter.initializer) {
seenOptionalParameter = true;
if (parameter.questionToken && parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
}
}
else {
if (seenOptionalParameter) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter);
}
}
}
}
function checkGrammarFunctionLikeDeclaration(node) {
return checkGrammarModifiers(node) || checkGrammarTypeParameterList(node, node.typeParameters) || checkGrammarParameterList(node.parameters);
}
function checkGrammarIndexSignatureParameters(node) {
var parameter = node.parameters[0];
if (node.parameters.length !== 1) {
if (parameter) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
}
else {
return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
}
}
if (parameter.dotDotDotToken) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
}
if (parameter.flags & 243) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);
}
if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);
}
if (parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);
}
if (!parameter.type) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
}
if (parameter.type.kind !== 119 && parameter.type.kind !== 117) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number);
}
if (!node.type) {
return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
}
}
function checkGrammarForIndexSignatureModifier(node) {
if (node.flags & 243) {
grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members);
}
}
function checkGrammarIndexSignature(node) {
checkGrammarModifiers(node) || checkGrammarIndexSignatureParameters(node) || checkGrammarForIndexSignatureModifier(node);
}
function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) {
if (typeArguments && typeArguments.length === 0) {
var sourceFile = ts.getSourceFileOfNode(node);
var start = typeArguments.pos - "<".length;
var end = ts.skipTrivia(sourceFile.text, typeArguments.end) + ">".length;
return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty);
}
}
function checkGrammarTypeArguments(node, typeArguments) {
return checkGrammarForDisallowedTrailingComma(typeArguments) ||
checkGrammarForAtLeastOneTypeArgument(node, typeArguments);
}
function checkGrammarForOmittedArgument(node, arguments) {
if (arguments) {
var sourceFile = ts.getSourceFileOfNode(node);
for (var i = 0, n = arguments.length; i < n; i++) {
var arg = arguments[i];
if (arg.kind === 170) {
return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
}
}
}
}
function checkGrammarArguments(node, arguments) {
return checkGrammarForDisallowedTrailingComma(arguments) ||
checkGrammarForOmittedArgument(node, arguments);
}
function checkGrammarHeritageClause(node) {
var types = node.types;
if (checkGrammarForDisallowedTrailingComma(types)) {
return true;
}
if (types && types.length === 0) {
var listType = ts.tokenToString(node.token);
var sourceFile = ts.getSourceFileOfNode(node);
return grammarErrorAtPos(sourceFile, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType);
}
}
function checkGrammarClassDeclarationHeritageClauses(node) {
var seenExtendsClause = false;
var seenImplementsClause = false;
if (!checkGrammarModifiers(node) && node.heritageClauses) {
for (var i = 0, n = node.heritageClauses.length; i < n; i++) {
ts.Debug.assert(i <= 2);
var heritageClause = node.heritageClauses[i];
if (heritageClause.token === 78) {
if (seenExtendsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
}
if (seenImplementsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_must_precede_implements_clause);
}
if (heritageClause.types.length > 1) {
return grammarErrorOnFirstToken(heritageClause.types[1], ts.Diagnostics.Classes_can_only_extend_a_single_class);
}
seenExtendsClause = true;
}
else {
ts.Debug.assert(heritageClause.token === 101);
if (seenImplementsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
}
seenImplementsClause = true;
}
checkGrammarHeritageClause(heritageClause);
}
}
}
function checkGrammarInterfaceDeclaration(node) {
var seenExtendsClause = false;
if (node.heritageClauses) {
for (var i = 0, n = node.heritageClauses.length; i < n; i++) {
ts.Debug.assert(i <= 1);
var heritageClause = node.heritageClauses[i];
if (heritageClause.token === 78) {
if (seenExtendsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
}
seenExtendsClause = true;
}
else {
ts.Debug.assert(heritageClause.token === 101);
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
}
checkGrammarHeritageClause(heritageClause);
}
}
return false;
}
function checkGrammarComputedPropertyName(node) {
if (node.kind !== 124) {
return false;
}
var computedPropertyName = node;
if (computedPropertyName.expression.kind === 165 && computedPropertyName.expression.operatorToken.kind === 23) {
return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
}
}
function checkGrammarForGenerator(node) {
if (node.asteriskToken) {
return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_currently_supported);
}
}
function checkGrammarFunctionName(name) {
return checkGrammarEvalOrArgumentsInStrictMode(name, name);
}
function checkGrammarForInvalidQuestionMark(node, questionToken, message) {
if (questionToken) {
return grammarErrorOnNode(questionToken, message);
}
}
function checkGrammarObjectLiteralExpression(node) {
var seen = {};
var Property = 1;
var GetAccessor = 2;
var SetAccesor = 4;
var GetOrSetAccessor = GetAccessor | SetAccesor;
var inStrictMode = (node.parserContextFlags & 1) !== 0;
for (var i = 0, n = node.properties.length; i < n; i++) {
var prop = node.properties[i];
var name = prop.name;
if (prop.kind === 170 ||
name.kind === 124) {
checkGrammarComputedPropertyName(name);
continue;
}
var currentKind;
if (prop.kind === 207 || prop.kind === 208) {
checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
if (name.kind === 7) {
checkGrammarNumbericLiteral(name);
}
currentKind = Property;
}
else if (prop.kind === 130) {
currentKind = Property;
}
else if (prop.kind === 132) {
currentKind = GetAccessor;
}
else if (prop.kind === 133) {
currentKind = SetAccesor;
}
else {
ts.Debug.fail("Unexpected syntax kind:" + prop.kind);
}
if (!ts.hasProperty(seen, name.text)) {
seen[name.text] = currentKind;
}
else {
var existingKind = seen[name.text];
if (currentKind === Property && existingKind === Property) {
if (inStrictMode) {
grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode);
}
}
else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
seen[name.text] = currentKind | existingKind;
}
else {
return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
}
}
else {
return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
}
}
}
}
function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
return true;
}
if (forInOrOfStatement.initializer.kind === 192) {
var variableList = forInOrOfStatement.initializer;
if (!checkGrammarVariableDeclarationList(variableList)) {
if (variableList.declarations.length > 1) {
var diagnostic = forInOrOfStatement.kind === 180 ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
}
var firstDeclaration = variableList.declarations[0];
if (firstDeclaration.initializer) {
var diagnostic = forInOrOfStatement.kind === 180 ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
return grammarErrorOnNode(firstDeclaration.name, diagnostic);
}
if (firstDeclaration.type) {
var diagnostic = forInOrOfStatement.kind === 180 ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
return grammarErrorOnNode(firstDeclaration, diagnostic);
}
}
}
return false;
}
function checkGrammarForOfStatement(forOfStatement) {
return grammarErrorOnFirstToken(forOfStatement, ts.Diagnostics.for_of_statements_are_not_currently_supported);
if (languageVersion < 2) {
return grammarErrorOnFirstToken(forOfStatement, ts.Diagnostics.for_of_statements_are_only_available_when_targeting_ECMAScript_6_or_higher);
}
return checkGrammarForInOrForOfStatement(forOfStatement);
}
function checkGrammarAccessor(accessor) {
var kind = accessor.kind;
if (languageVersion < 1) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
}
else if (ts.isInAmbientContext(accessor)) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
}
else if (accessor.body === undefined) {
return grammarErrorAtPos(ts.getSourceFileOfNode(accessor), accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
}
else if (accessor.typeParameters) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
}
else if (kind === 132 && accessor.parameters.length) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters);
}
else if (kind === 133) {
if (accessor.type) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
}
else if (accessor.parameters.length !== 1) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
}
else {
var parameter = accessor.parameters[0];
if (parameter.dotDotDotToken) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
}
else if (parameter.flags & 243) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
}
else if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
}
else if (parameter.initializer) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer);
}
}
}
}
function checkGrammarForNonSymbolComputedProperty(node, message) {
if (node.kind === 124 && !ts.isWellKnownSymbolSyntactically(node.expression)) {
return grammarErrorOnNode(node, message);
}
}
function checkGrammarMethod(node) {
if (checkGrammarDisallowedModifiersInBlockOrObjectLiteralExpression(node) ||
checkGrammarFunctionLikeDeclaration(node) ||
checkGrammarForGenerator(node)) {
return true;
}
if (node.parent.kind === 150) {
if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
return true;
}
else if (node.body === undefined) {
return grammarErrorAtPos(getSourceFile(node), node.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
}
}
if (node.parent.kind === 194) {
if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) {
return true;
}
if (ts.isInAmbientContext(node)) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol);
}
else if (!node.body) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol);
}
}
else if (node.parent.kind === 195) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol);
}
else if (node.parent.kind === 141) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol);
}
}
function isIterationStatement(node, lookInLabeledStatements) {
switch (node.kind) {
case 179:
case 180:
case 181:
case 177:
case 178:
return true;
case 187:
return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
}
return false;
}
function checkGrammarBreakOrContinueStatement(node) {
var current = node;
while (current) {
if (ts.isAnyFunction(current)) {
return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
}
switch (current.kind) {
case 187:
if (node.label && current.label.text === node.label.text) {
var isMisplacedContinueLabel = node.kind === 182 && !isIterationStatement(current.statement, true);
if (isMisplacedContinueLabel) {
return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
}
return false;
}
break;
case 186:
if (node.kind === 183 && !node.label) {
return false;
}
break;
default:
if (isIterationStatement(current, false) && !node.label) {
return false;
}
break;
}
current = current.parent;
}
if (node.label) {
var message = node.kind === 183 ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
return grammarErrorOnNode(node, message);
}
else {
var message = node.kind === 183 ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
return grammarErrorOnNode(node, message);
}
}
function checkGrammarBindingElement(node) {
if (node.dotDotDotToken) {
var elements = node.parent.elements;
if (node !== elements[elements.length - 1]) {
return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern);
}
if (node.initializer) {
return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
}
}
return checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
}
function checkGrammarVariableDeclaration(node) {
if (ts.isInAmbientContext(node)) {
if (ts.isBindingPattern(node.name)) {
return grammarErrorOnNode(node, ts.Diagnostics.Destructuring_declarations_are_not_allowed_in_ambient_contexts);
}
if (node.initializer) {
return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - 1, 1, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
}
else {
if (!node.initializer) {
if (ts.isBindingPattern(node.name) && !ts.isBindingPattern(node.parent)) {
return grammarErrorOnNode(node, ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer);
}
if (ts.isConst(node)) {
return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
}
}
}
var checkLetConstNames = languageVersion >= 2 && (ts.isLet(node) || ts.isConst(node));
return (checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name)) ||
checkGrammarEvalOrArgumentsInStrictMode(node, node.name);
}
function checkGrammarNameInLetOrConstDeclarations(name) {
if (name.kind === 64) {
if (name.text === "let") {
return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
}
}
else {
var elements = name.elements;
for (var i = 0; i < elements.length; ++i) {
checkGrammarNameInLetOrConstDeclarations(elements[i].name);
}
}
}
function checkGrammarVariableDeclarationList(declarationList) {
var declarations = declarationList.declarations;
if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) {
return true;
}
if (!declarationList.declarations.length) {
return grammarErrorAtPos(ts.getSourceFileOfNode(declarationList), declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
if (languageVersion < 2) {
if (ts.isLet(declarationList)) {
return grammarErrorOnFirstToken(declarationList, ts.Diagnostics.let_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
else if (ts.isConst(declarationList)) {
return grammarErrorOnFirstToken(declarationList, ts.Diagnostics.const_declarations_are_only_available_when_targeting_ECMAScript_6_and_higher);
}
}
}
function allowLetAndConstDeclarations(parent) {
switch (parent.kind) {
case 176:
case 177:
case 178:
case 185:
case 179:
case 180:
case 181:
return false;
case 187:
return allowLetAndConstDeclarations(parent.parent);
}
return true;
}
function checkGrammarForDisallowedLetOrConstStatement(node) {
if (!allowLetAndConstDeclarations(node.parent)) {
if (ts.isLet(node.declarationList)) {
return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
}
else if (ts.isConst(node.declarationList)) {
return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
}
}
}
function isIntegerLiteral(expression) {
if (expression.kind === 163) {
var unaryExpression = expression;
if (unaryExpression.operator === 33 || unaryExpression.operator === 34) {
expression = unaryExpression.operand;
}
}
if (expression.kind === 7) {
return /^[0-9]+([eE]\+?[0-9]+)?$/.test(expression.text);
}
return false;
}
function checkGrammarEnumDeclaration(enumDecl) {
var enumIsConst = (enumDecl.flags & 4096) !== 0;
var hasError = false;
if (!enumIsConst) {
var inConstantEnumMemberSection = true;
var inAmbientContext = ts.isInAmbientContext(enumDecl);
for (var i = 0, n = enumDecl.members.length; i < n; i++) {
var node = enumDecl.members[i];
if (node.name.kind === 124) {
hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
}
else if (inAmbientContext) {
if (node.initializer && !isIntegerLiteral(node.initializer)) {
hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers) || hasError;
}
}
else if (node.initializer) {
inConstantEnumMemberSection = isIntegerLiteral(node.initializer);
}
else if (!inConstantEnumMemberSection) {
hasError = grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer) || hasError;
}
}
}
return hasError;
}
function hasParseDiagnostics(sourceFile) {
return sourceFile.parseDiagnostics.length > 0;
}
function scanToken(scanner, pos) {
scanner.setTextPos(pos);
scanner.scan();
var start = scanner.getTokenPos();
return start;
}
function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var scanner = ts.createScanner(languageVersion, true, sourceFile.text);
var start = scanToken(scanner, node.pos);
diagnostics.add(ts.createFileDiagnostic(sourceFile, start, scanner.getTextPos() - start, message, arg0, arg1, arg2));
return true;
}
}
function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) {
if (!hasParseDiagnostics(sourceFile)) {
diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2));
return true;
}
}
function grammarErrorOnNode(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var span = ts.getErrorSpanForNode(node);
var start = span.end > span.pos ? ts.skipTrivia(sourceFile.text, span.pos) : span.pos;
diagnostics.add(ts.createFileDiagnostic(sourceFile, start, span.end - start, message, arg0, arg1, arg2));
return true;
}
}
function checkGrammarEvalOrArgumentsInStrictMode(contextNode, identifier) {
if (contextNode && (contextNode.parserContextFlags & 1) && ts.isEvalOrArgumentsIdentifier(identifier)) {
var name = ts.declarationNameToString(identifier);
return grammarErrorOnNode(identifier, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name);
}
}
function checkGrammarConstructorTypeParameters(node) {
if (node.typeParameters) {
return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
}
}
function checkGrammarConstructorTypeAnnotation(node) {
if (node.type) {
return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
}
}
function checkGrammarProperty(node) {
if (node.parent.kind === 194) {
if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) ||
checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
}
else if (node.parent.kind === 195) {
if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
}
else if (node.parent.kind === 141) {
if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
}
if (ts.isInAmbientContext(node) && node.initializer) {
return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
}
function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
if (node.kind === 195 ||
node.kind === 200 ||
node.kind === 201 ||
(node.flags & 2)) {
return false;
}
return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
}
function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
for (var i = 0, n = file.statements.length; i < n; i++) {
var decl = file.statements[i];
if (ts.isDeclaration(decl) || decl.kind === 173) {
if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
return true;
}
}
}
}
function checkGrammarSourceFile(node) {
return ts.isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
}
function checkGrammarStatementInAmbientContext(node) {
if (ts.isInAmbientContext(node)) {
if (isAccessor(node.parent.kind)) {
return getNodeLinks(node).hasReportedStatementInAmbientContext = true;
}
var links = getNodeLinks(node);
if (!links.hasReportedStatementInAmbientContext && ts.isAnyFunction(node.parent)) {
return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
}
if (node.parent.kind === 172 || node.parent.kind === 199 || node.parent.kind === 210) {
var links = getNodeLinks(node.parent);
if (!links.hasReportedStatementInAmbientContext) {
return links.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
}
}
else {
}
}
}
function checkGrammarNumbericLiteral(node) {
if (node.flags & 8192) {
if (node.parserContextFlags & 1) {
return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode);
}
else if (languageVersion >= 1) {
return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher);
}
}
}
function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var scanner = ts.createScanner(languageVersion, true, sourceFile.text);
scanToken(scanner, node.pos);
diagnostics.add(ts.createFileDiagnostic(sourceFile, scanner.getTextPos(), 0, message, arg0, arg1, arg2));
return true;
}
}
initializeTypeChecker();
return checker;
}
ts.createTypeChecker = createTypeChecker;
})(ts || (ts = {}));
var ts;
(function (ts) {
var indentStrings = ["", " "];
function getIndentString(level) {
if (indentStrings[level] === undefined) {
indentStrings[level] = getIndentString(level - 1) + indentStrings[1];
}
return indentStrings[level];
}
ts.getIndentString = getIndentString;
function getIndentSize() {
return indentStrings[1].length;
}
function shouldEmitToOwnFile(sourceFile, compilerOptions) {
if (!ts.isDeclarationFile(sourceFile)) {
if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) {
return true;
}
return false;
}
return false;
}
ts.shouldEmitToOwnFile = shouldEmitToOwnFile;
function isExternalModuleOrDeclarationFile(sourceFile) {
return ts.isExternalModule(sourceFile) || ts.isDeclarationFile(sourceFile);
}
ts.isExternalModuleOrDeclarationFile = isExternalModuleOrDeclarationFile;
function createTextWriter(newLine) {
var output = "";
var indent = 0;
var lineStart = true;
var lineCount = 0;
var linePos = 0;
function write(s) {
if (s && s.length) {
if (lineStart) {
output += getIndentString(indent);
lineStart = false;
}
output += s;
}
}
function rawWrite(s) {
if (s !== undefined) {
if (lineStart) {
lineStart = false;
}
output += s;
}
}
function writeLiteral(s) {
if (s && s.length) {
write(s);
var lineStartsOfS = ts.computeLineStarts(s);
if (lineStartsOfS.length > 1) {
lineCount = lineCount + lineStartsOfS.length - 1;
linePos = output.length - s.length + lineStartsOfS[lineStartsOfS.length - 1];
}
}
}
function writeLine() {
if (!lineStart) {
output += newLine;
lineCount++;
linePos = output.length;
lineStart = true;
}
}
function writeTextOfNode(sourceFile, node) {
write(ts.getSourceTextOfNodeFromSourceFile(sourceFile, node));
}
return {
write: write,
rawWrite: rawWrite,
writeTextOfNode: writeTextOfNode,
writeLiteral: writeLiteral,
writeLine: writeLine,
increaseIndent: function () { return indent++; },
decreaseIndent: function () { return indent--; },
getIndent: function () { return indent; },
getTextPos: function () { return output.length; },
getLine: function () { return lineCount + 1; },
getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; },
getText: function () { return output; }
};
}
function getLineOfLocalPosition(currentSourceFile, pos) {
return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line;
}
function emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments) {
if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos &&
getLineOfLocalPosition(currentSourceFile, node.pos) !== getLineOfLocalPosition(currentSourceFile, leadingComments[0].pos)) {
writer.writeLine();
}
}
function emitComments(currentSourceFile, writer, comments, trailingSeparator, newLine, writeComment) {
var emitLeadingSpace = !trailingSeparator;
ts.forEach(comments, function (comment) {
if (emitLeadingSpace) {
writer.write(" ");
emitLeadingSpace = false;
}
writeComment(currentSourceFile, writer, comment, newLine);
if (comment.hasTrailingNewLine) {
writer.writeLine();
}
else if (trailingSeparator) {
writer.write(" ");
}
else {
emitLeadingSpace = true;
}
});
}
function writeCommentRange(currentSourceFile, writer, comment, newLine) {
if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
var firstCommentLineAndCharacter = ts.getLineAndCharacterOfPosition(currentSourceFile, comment.pos);
var lineCount = ts.getLineStarts(currentSourceFile).length;
var firstCommentLineIndent;
for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) {
var nextLineStart = (currentLine + 1) === lineCount ? currentSourceFile.text.length + 1 : ts.getStartPositionOfLine(currentLine + 1, currentSourceFile);
if (pos !== comment.pos) {
if (firstCommentLineIndent === undefined) {
firstCommentLineIndent = calculateIndent(ts.getStartPositionOfLine(firstCommentLineAndCharacter.line, currentSourceFile), comment.pos);
}
var currentWriterIndentSpacing = writer.getIndent() * getIndentSize();
var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(pos, nextLineStart);
if (spacesToEmit > 0) {
var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize();
var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize());
writer.rawWrite(indentSizeSpaceString);
while (numberOfSingleSpacesToEmit) {
writer.rawWrite(" ");
numberOfSingleSpacesToEmit--;
}
}
else {
writer.rawWrite("");
}
}
writeTrimmedCurrentLine(pos, nextLineStart);
pos = nextLineStart;
}
}
else {
writer.write(currentSourceFile.text.substring(comment.pos, comment.end));
}
function writeTrimmedCurrentLine(pos, nextLineStart) {
var end = Math.min(comment.end, nextLineStart - 1);
var currentLineText = currentSourceFile.text.substring(pos, end).replace(/^\s+|\s+$/g, '');
if (currentLineText) {
writer.write(currentLineText);
if (end !== comment.end) {
writer.writeLine();
}
}
else {
writer.writeLiteral(newLine);
}
}
function calculateIndent(pos, end) {
var currentLineIndent = 0;
for (; pos < end && ts.isWhiteSpace(currentSourceFile.text.charCodeAt(pos)); pos++) {
if (currentSourceFile.text.charCodeAt(pos) === 9) {
currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize());
}
else {
currentLineIndent++;
}
}
return currentLineIndent;
}
}
function getFirstConstructorWithBody(node) {
return ts.forEach(node.members, function (member) {
if (member.kind === 131 && ts.nodeIsPresent(member.body)) {
return member;
}
});
}
function getAllAccessorDeclarations(declarations, accessor) {
var firstAccessor;
var getAccessor;
var setAccessor;
if (ts.hasDynamicName(accessor)) {
firstAccessor = accessor;
if (accessor.kind === 132) {
getAccessor = accessor;
}
else if (accessor.kind === 133) {
setAccessor = accessor;
}
else {
ts.Debug.fail("Accessor has wrong kind");
}
}
else {
ts.forEach(declarations, function (member) {
if ((member.kind === 132 || member.kind === 133) && (member.flags & 128) === (accessor.flags & 128)) {
var memberName = ts.getPropertyNameForPropertyNameNode(member.name);
var accessorName = ts.getPropertyNameForPropertyNameNode(accessor.name);
if (memberName === accessorName) {
if (!firstAccessor) {
firstAccessor = member;
}
if (member.kind === 132 && !getAccessor) {
getAccessor = member;
}
if (member.kind === 133 && !setAccessor) {
setAccessor = member;
}
}
}
});
}
return {
firstAccessor: firstAccessor,
getAccessor: getAccessor,
setAccessor: setAccessor
};
}
function getSourceFilePathInNewDir(sourceFile, host, newDirPath) {
var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory());
sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), "");
return ts.combinePaths(newDirPath, sourceFilePath);
}
function getOwnEmitOutputFilePath(sourceFile, host, extension) {
var compilerOptions = host.getCompilerOptions();
if (compilerOptions.outDir) {
var emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir));
}
else {
var emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName);
}
return emitOutputFilePathWithoutExtension + extension;
}
function writeFile(host, diagnostics, fileName, data, writeByteOrderMark) {
host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
});
}
function emitDeclarations(host, resolver, diagnostics, jsFilePath, root) {
var newLine = host.getNewLine();
var compilerOptions = host.getCompilerOptions();
var languageVersion = compilerOptions.target || 0;
var write;
var writeLine;
var increaseIndent;
var decreaseIndent;
var writeTextOfNode;
var writer = createAndSetNewTextWriterWithSymbolWriter();
var enclosingDeclaration;
var currentSourceFile;
var reportedDeclarationError = false;
var emitJsDocComments = compilerOptions.removeComments ? function (declaration) { } : writeJsDocComments;
var emit = compilerOptions.stripInternal ? stripInternal : emitNode;
var aliasDeclarationEmitInfo = [];
var referencePathsOutput = "";
if (root) {
if (!compilerOptions.noResolve) {
var addedGlobalFileReference = false;
ts.forEach(root.referencedFiles, function (fileReference) {
var referencedFile = ts.tryResolveScriptReference(host, root, fileReference);
if (referencedFile && ((referencedFile.flags & 1024) ||
shouldEmitToOwnFile(referencedFile, compilerOptions) ||
!addedGlobalFileReference)) {
writeReferencePath(referencedFile);
if (!isExternalModuleOrDeclarationFile(referencedFile)) {
addedGlobalFileReference = true;
}
}
});
}
emitSourceFile(root);
}
else {
var emittedReferencedFiles = [];
ts.forEach(host.getSourceFiles(), function (sourceFile) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
if (!compilerOptions.noResolve) {
ts.forEach(sourceFile.referencedFiles, function (fileReference) {
var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference);
if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) &&
!ts.contains(emittedReferencedFiles, referencedFile))) {
writeReferencePath(referencedFile);
emittedReferencedFiles.push(referencedFile);
}
});
}
emitSourceFile(sourceFile);
}
});
}
return {
reportedDeclarationError: reportedDeclarationError,
aliasDeclarationEmitInfo: aliasDeclarationEmitInfo,
synchronousDeclarationOutput: writer.getText(),
referencePathsOutput: referencePathsOutput
};
function hasInternalAnnotation(range) {
var text = currentSourceFile.text;
var comment = text.substring(range.pos, range.end);
return comment.indexOf("@internal") >= 0;
}
function stripInternal(node) {
if (node) {
var leadingCommentRanges = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) {
return;
}
emitNode(node);
}
}
function createAndSetNewTextWriterWithSymbolWriter() {
var writer = createTextWriter(newLine);
writer.trackSymbol = trackSymbol;
writer.writeKeyword = writer.write;
writer.writeOperator = writer.write;
writer.writePunctuation = writer.write;
writer.writeSpace = writer.write;
writer.writeStringLiteral = writer.writeLiteral;
writer.writeParameter = writer.write;
writer.writeSymbol = writer.write;
setWriter(writer);
return writer;
}
function setWriter(newWriter) {
writer = newWriter;
write = newWriter.write;
writeTextOfNode = newWriter.writeTextOfNode;
writeLine = newWriter.writeLine;
increaseIndent = newWriter.increaseIndent;
decreaseIndent = newWriter.decreaseIndent;
}
function writeAsychronousImportDeclarations(importDeclarations) {
var oldWriter = writer;
ts.forEach(importDeclarations, function (aliasToWrite) {
var aliasEmitInfo = ts.forEach(aliasDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.declaration === aliasToWrite ? declEmitInfo : undefined; });
if (aliasEmitInfo) {
createAndSetNewTextWriterWithSymbolWriter();
for (var declarationIndent = aliasEmitInfo.indent; declarationIndent; declarationIndent--) {
increaseIndent();
}
writeImportDeclaration(aliasToWrite);
aliasEmitInfo.asynchronousOutput = writer.getText();
}
});
setWriter(oldWriter);
}
function handleSymbolAccessibilityError(symbolAccesibilityResult) {
if (symbolAccesibilityResult.accessibility === 0) {
if (symbolAccesibilityResult && symbolAccesibilityResult.aliasesToMakeVisible) {
writeAsychronousImportDeclarations(symbolAccesibilityResult.aliasesToMakeVisible);
}
}
else {
reportedDeclarationError = true;
var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccesibilityResult);
if (errorInfo) {
if (errorInfo.typeName) {
diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, errorInfo.typeName), symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
}
else {
diagnostics.push(ts.createDiagnosticForNode(symbolAccesibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccesibilityResult.errorSymbolName, symbolAccesibilityResult.errorModuleName));
}
}
}
}
function trackSymbol(symbol, enclosingDeclaration, meaning) {
handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning));
}
function writeTypeOfDeclaration(declaration, type, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
write(": ");
if (type) {
emitType(type);
}
else {
resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, writer);
}
}
function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
write(": ");
if (signature.type) {
emitType(signature.type);
}
else {
resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 2, writer);
}
}
function emitLines(nodes) {
for (var i = 0, n = nodes.length; i < n; i++) {
emit(nodes[i]);
}
}
function emitSeparatedList(nodes, separator, eachNodeEmitFn) {
var currentWriterPos = writer.getTextPos();
for (var i = 0, n = nodes.length; i < n; i++) {
if (currentWriterPos !== writer.getTextPos()) {
write(separator);
}
currentWriterPos = writer.getTextPos();
eachNodeEmitFn(nodes[i]);
}
}
function emitCommaList(nodes, eachNodeEmitFn) {
emitSeparatedList(nodes, ", ", eachNodeEmitFn);
}
function writeJsDocComments(declaration) {
if (declaration) {
var jsDocComments = ts.getJsDocComments(declaration, currentSourceFile);
emitNewLineBeforeLeadingComments(currentSourceFile, writer, declaration, jsDocComments);
emitComments(currentSourceFile, writer, jsDocComments, true, newLine, writeCommentRange);
}
}
function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
emitType(type);
}
function emitType(type) {
switch (type.kind) {
case 110:
case 119:
case 117:
case 111:
case 120:
case 98:
case 8:
return writeTextOfNode(currentSourceFile, type);
case 137:
return emitTypeReference(type);
case 140:
return emitTypeQuery(type);
case 142:
return emitArrayType(type);
case 143:
return emitTupleType(type);
case 144:
return emitUnionType(type);
case 145:
return emitParenType(type);
case 138:
case 139:
return emitSignatureDeclarationWithJsDocComments(type);
case 141:
return emitTypeLiteral(type);
case 64:
return emitEntityName(type);
case 123:
return emitEntityName(type);
default:
ts.Debug.fail("Unknown type annotation: " + type.kind);
}
function emitEntityName(entityName) {
var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 200 ? entityName.parent : enclosingDeclaration);
handleSymbolAccessibilityError(visibilityResult);
writeEntityName(entityName);
function writeEntityName(entityName) {
if (entityName.kind === 64) {
writeTextOfNode(currentSourceFile, entityName);
}
else {
var qualifiedName = entityName;
writeEntityName(qualifiedName.left);
write(".");
writeTextOfNode(currentSourceFile, qualifiedName.right);
}
}
}
function emitTypeReference(type) {
emitEntityName(type.typeName);
if (type.typeArguments) {
write("<");
emitCommaList(type.typeArguments, emitType);
write(">");
}
}
function emitTypeQuery(type) {
write("typeof ");
emitEntityName(type.exprName);
}
function emitArrayType(type) {
emitType(type.elementType);
write("[]");
}
function emitTupleType(type) {
write("[");
emitCommaList(type.elementTypes, emitType);
write("]");
}
function emitUnionType(type) {
emitSeparatedList(type.types, " | ", emitType);
}
function emitParenType(type) {
write("(");
emitType(type.type);
write(")");
}
function emitTypeLiteral(type) {
write("{");
if (type.members.length) {
writeLine();
increaseIndent();
emitLines(type.members);
decreaseIndent();
}
write("}");
}
}
function emitSourceFile(node) {
currentSourceFile = node;
enclosingDeclaration = node;
emitLines(node.statements);
}
function emitExportAssignment(node) {
write("export = ");
writeTextOfNode(currentSourceFile, node.exportName);
write(";");
writeLine();
}
function emitModuleElementDeclarationFlags(node) {
if (node.parent === currentSourceFile) {
if (node.flags & 1) {
write("export ");
}
if (node.kind !== 195) {
write("declare ");
}
}
}
function emitClassMemberDeclarationFlags(node) {
if (node.flags & 32) {
write("private ");
}
else if (node.flags & 64) {
write("protected ");
}
if (node.flags & 128) {
write("static ");
}
}
function emitImportDeclaration(node) {
var nodeEmitInfo = {
declaration: node,
outputPos: writer.getTextPos(),
indent: writer.getIndent(),
hasWritten: resolver.isDeclarationVisible(node)
};
aliasDeclarationEmitInfo.push(nodeEmitInfo);
if (nodeEmitInfo.hasWritten) {
writeImportDeclaration(node);
}
}
function writeImportDeclaration(node) {
emitJsDocComments(node);
if (node.flags & 1) {
write("export ");
}
write("import ");
writeTextOfNode(currentSourceFile, node.name);
write(" = ");
if (ts.isInternalModuleImportDeclaration(node)) {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.moduleReference, getImportEntityNameVisibilityError);
write(";");
}
else {
write("require(");
writeTextOfNode(currentSourceFile, ts.getExternalModuleImportDeclarationExpression(node));
write(");");
}
writer.writeLine();
function getImportEntityNameVisibilityError(symbolAccesibilityResult) {
return {
diagnosticMessage: ts.Diagnostics.Import_declaration_0_is_using_private_name_1,
errorNode: node,
typeName: node.name
};
}
}
function emitModuleDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("module ");
writeTextOfNode(currentSourceFile, node.name);
while (node.body.kind !== 199) {
node = node.body;
write(".");
writeTextOfNode(currentSourceFile, node.name);
}
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
write(" {");
writeLine();
increaseIndent();
emitLines(node.body.statements);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitTypeAliasDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("type ");
writeTextOfNode(currentSourceFile, node.name);
write(" = ");
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.type, getTypeAliasDeclarationVisibilityError);
write(";");
writeLine();
}
function getTypeAliasDeclarationVisibilityError(symbolAccesibilityResult) {
return {
diagnosticMessage: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,
errorNode: node.type,
typeName: node.name
};
}
}
function emitEnumDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.isConst(node)) {
write("const ");
}
write("enum ");
writeTextOfNode(currentSourceFile, node.name);
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
}
}
function emitEnumMemberDeclaration(node) {
emitJsDocComments(node);
writeTextOfNode(currentSourceFile, node.name);
var enumMemberValue = resolver.getConstantValue(node);
if (enumMemberValue !== undefined) {
write(" = ");
write(enumMemberValue.toString());
}
write(",");
writeLine();
}
function isPrivateMethodTypeParameter(node) {
return node.parent.kind === 130 && (node.parent.flags & 32);
}
function emitTypeParameters(typeParameters) {
function emitTypeParameter(node) {
increaseIndent();
emitJsDocComments(node);
decreaseIndent();
writeTextOfNode(currentSourceFile, node.name);
if (node.constraint && !isPrivateMethodTypeParameter(node)) {
write(" extends ");
if (node.parent.kind === 138 ||
node.parent.kind === 139 ||
(node.parent.parent && node.parent.parent.kind === 141)) {
ts.Debug.assert(node.parent.kind === 130 ||
node.parent.kind === 129 ||
node.parent.kind === 138 ||
node.parent.kind === 139 ||
node.parent.kind === 134 ||
node.parent.kind === 135);
emitType(node.constraint);
}
else {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError);
}
}
function getTypeParameterConstraintVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.parent.kind) {
case 194:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
break;
case 195:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
break;
case 135:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 134:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 130:
case 129:
if (node.parent.flags & 128) {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 194) {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case 193:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
default:
ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
}
if (typeParameters) {
write("<");
emitCommaList(typeParameters, emitTypeParameter);
write(">");
}
}
function emitHeritageClause(typeReferences, isImplementsList) {
if (typeReferences) {
write(isImplementsList ? " implements " : " extends ");
emitCommaList(typeReferences, emitTypeOfTypeReference);
}
function emitTypeOfTypeReference(node) {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError);
function getHeritageClauseVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (node.parent.parent.kind === 194) {
diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : ts.Diagnostics.Extends_clause_of_exported_class_0_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = ts.Diagnostics.Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.parent.parent.name
};
}
}
}
function emitClassDeclaration(node) {
function emitParameterProperties(constructorDeclaration) {
if (constructorDeclaration) {
ts.forEach(constructorDeclaration.parameters, function (param) {
if (param.flags & 112) {
emitPropertyDeclaration(param);
}
});
}
}
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("class ");
writeTextOfNode(currentSourceFile, node.name);
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
var baseTypeNode = ts.getClassBaseTypeNode(node);
if (baseTypeNode) {
emitHeritageClause([baseTypeNode], false);
}
emitHeritageClause(ts.getClassImplementedTypeNodes(node), true);
write(" {");
writeLine();
increaseIndent();
emitParameterProperties(getFirstConstructorWithBody(node));
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitInterfaceDeclaration(node) {
if (resolver.isDeclarationVisible(node)) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("interface ");
writeTextOfNode(currentSourceFile, node.name);
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
emitHeritageClause(ts.getInterfaceBaseTypeNodes(node), false);
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
}
function emitPropertyDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
emitJsDocComments(node);
emitClassMemberDeclarationFlags(node);
emitVariableDeclaration(node);
write(";");
writeLine();
}
function emitVariableDeclaration(node) {
if (node.kind !== 191 || resolver.isDeclarationVisible(node)) {
writeTextOfNode(currentSourceFile, node.name);
if ((node.kind === 128 || node.kind === 127) && ts.hasQuestionToken(node)) {
write("?");
}
if ((node.kind === 128 || node.kind === 127) && node.parent.kind === 141) {
emitTypeOfVariableDeclarationFromTypeLiteral(node);
}
else if (!(node.flags & 32)) {
writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
}
}
function getVariableDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (node.kind === 191) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
}
else if (node.kind === 128 || node.kind === 127) {
if (node.flags & 128) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.kind === 194) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
}
}
return diagnosticMessage !== undefined ? {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
} : undefined;
}
}
function emitTypeOfVariableDeclarationFromTypeLiteral(node) {
if (node.type) {
write(": ");
emitType(node.type);
}
}
function emitVariableStatement(node) {
var hasDeclarationWithEmit = ts.forEach(node.declarationList.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); });
if (hasDeclarationWithEmit) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.isLet(node.declarationList)) {
write("let ");
}
else if (ts.isConst(node.declarationList)) {
write("const ");
}
else {
write("var ");
}
emitCommaList(node.declarationList.declarations, emitVariableDeclaration);
write(";");
writeLine();
}
}
function emitAccessorDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
var accessors = getAllAccessorDeclarations(node.parent.members, node);
if (node === accessors.firstAccessor) {
emitJsDocComments(accessors.getAccessor);
emitJsDocComments(accessors.setAccessor);
emitClassMemberDeclarationFlags(node);
writeTextOfNode(currentSourceFile, node.name);
if (!(node.flags & 32)) {
var accessorWithTypeAnnotation = node;
var type = getTypeAnnotationFromAccessor(node);
if (!type) {
var anotherAccessor = node.kind === 132 ? accessors.setAccessor : accessors.getAccessor;
type = getTypeAnnotationFromAccessor(anotherAccessor);
if (type) {
accessorWithTypeAnnotation = anotherAccessor;
}
}
writeTypeOfDeclaration(node, type, getAccessorDeclarationTypeVisibilityError);
}
write(";");
writeLine();
}
function getTypeAnnotationFromAccessor(accessor) {
if (accessor) {
return accessor.kind === 132 ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type : undefined;
}
}
function getAccessorDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
if (accessorWithTypeAnnotation.kind === 133) {
if (accessorWithTypeAnnotation.parent.flags & 128) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: accessorWithTypeAnnotation.parameters[0],
typeName: accessorWithTypeAnnotation.name
};
}
else {
if (accessorWithTypeAnnotation.flags & 128) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: accessorWithTypeAnnotation.name,
typeName: undefined
};
}
}
}
function emitFunctionDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
if ((node.kind !== 193 || resolver.isDeclarationVisible(node)) &&
!resolver.isImplementationOfOverload(node)) {
emitJsDocComments(node);
if (node.kind === 193) {
emitModuleElementDeclarationFlags(node);
}
else if (node.kind === 130) {
emitClassMemberDeclarationFlags(node);
}
if (node.kind === 193) {
write("function ");
writeTextOfNode(currentSourceFile, node.name);
}
else if (node.kind === 131) {
write("constructor");
}
else {
writeTextOfNode(currentSourceFile, node.name);
if (ts.hasQuestionToken(node)) {
write("?");
}
}
emitSignatureDeclaration(node);
}
}
function emitSignatureDeclarationWithJsDocComments(node) {
emitJsDocComments(node);
emitSignatureDeclaration(node);
}
function emitSignatureDeclaration(node) {
if (node.kind === 135 || node.kind === 139) {
write("new ");
}
emitTypeParameters(node.typeParameters);
if (node.kind === 136) {
write("[");
}
else {
write("(");
}
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitCommaList(node.parameters, emitParameterDeclaration);
if (node.kind === 136) {
write("]");
}
else {
write(")");
}
var isFunctionTypeOrConstructorType = node.kind === 138 || node.kind === 139;
if (isFunctionTypeOrConstructorType || node.parent.kind === 141) {
if (node.type) {
write(isFunctionTypeOrConstructorType ? " => " : ": ");
emitType(node.type);
}
}
else if (node.kind !== 131 && !(node.flags & 32)) {
writeReturnTypeAtSignature(node, getReturnTypeVisibilityError);
}
enclosingDeclaration = prevEnclosingDeclaration;
if (!isFunctionTypeOrConstructorType) {
write(";");
writeLine();
}
function getReturnTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.kind) {
case 135:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 134:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 136:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 130:
case 129:
if (node.flags & 128) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
}
else if (node.parent.kind === 194) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
}
break;
case 193:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;
break;
default:
ts.Debug.fail("This is unknown kind for signature: " + node.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node.name || node
};
}
}
function emitParameterDeclaration(node) {
increaseIndent();
emitJsDocComments(node);
if (node.dotDotDotToken) {
write("...");
}
if (ts.isBindingPattern(node.name)) {
write("_" + ts.indexOf(node.parent.parameters, node));
}
else {
writeTextOfNode(currentSourceFile, node.name);
}
if (node.initializer || ts.hasQuestionToken(node)) {
write("?");
}
decreaseIndent();
if (node.parent.kind === 138 ||
node.parent.kind === 139 ||
node.parent.parent.kind === 141) {
emitTypeOfVariableDeclarationFromTypeLiteral(node);
}
else if (!(node.parent.flags & 32)) {
writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError);
}
function getParameterDeclarationTypeVisibilityError(symbolAccesibilityResult) {
var diagnosticMessage;
switch (node.parent.kind) {
case 131:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
break;
case 135:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 134:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 130:
case 129:
if (node.parent.flags & 128) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 194) {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case 193:
diagnosticMessage = symbolAccesibilityResult.errorModuleName ? symbolAccesibilityResult.accessibility === 2 ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
default:
ts.Debug.fail("This is unknown parent for parameter: " + node.parent.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
}
function emitNode(node) {
switch (node.kind) {
case 131:
case 193:
case 130:
case 129:
return emitFunctionDeclaration(node);
case 135:
case 134:
case 136:
return emitSignatureDeclarationWithJsDocComments(node);
case 132:
case 133:
return emitAccessorDeclaration(node);
case 173:
return emitVariableStatement(node);
case 128:
case 127:
return emitPropertyDeclaration(node);
case 195:
return emitInterfaceDeclaration(node);
case 194:
return emitClassDeclaration(node);
case 196:
return emitTypeAliasDeclaration(node);
case 209:
return emitEnumMemberDeclaration(node);
case 197:
return emitEnumDeclaration(node);
case 198:
return emitModuleDeclaration(node);
case 200:
return emitImportDeclaration(node);
case 201:
return emitExportAssignment(node);
case 210:
return emitSourceFile(node);
}
}
function writeReferencePath(referencedFile) {
var declFileName = referencedFile.flags & 1024 ? referencedFile.fileName : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, host, ".d.ts") : ts.removeFileExtension(compilerOptions.out) + ".d.ts";
declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false);
referencePathsOutput += "/// <reference path=\"" + declFileName + "\" />" + newLine;
}
}
function getDeclarationDiagnostics(host, resolver, targetSourceFile) {
var diagnostics = [];
var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
emitDeclarations(host, resolver, diagnostics, jsFilePath, targetSourceFile);
return diagnostics;
}
ts.getDeclarationDiagnostics = getDeclarationDiagnostics;
function emitFiles(resolver, host, targetSourceFile) {
var compilerOptions = host.getCompilerOptions();
var languageVersion = compilerOptions.target || 0;
var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined;
var diagnostics = [];
var newLine = host.getNewLine();
if (targetSourceFile === undefined) {
ts.forEach(host.getSourceFiles(), function (sourceFile) {
if (shouldEmitToOwnFile(sourceFile, compilerOptions)) {
var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, ".js");
emitFile(jsFilePath, sourceFile);
}
});
if (compilerOptions.out) {
emitFile(compilerOptions.out);
}
}
else {
if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) {
var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, host, ".js");
emitFile(jsFilePath, targetSourceFile);
}
else if (!ts.isDeclarationFile(targetSourceFile) && compilerOptions.out) {
emitFile(compilerOptions.out);
}
}
diagnostics = ts.sortAndDeduplicateDiagnostics(diagnostics);
return {
emitSkipped: false,
diagnostics: diagnostics,
sourceMaps: sourceMapDataList
};
function emitJavaScript(jsFilePath, root) {
var writer = createTextWriter(newLine);
var write = writer.write;
var writeTextOfNode = writer.writeTextOfNode;
var writeLine = writer.writeLine;
var increaseIndent = writer.increaseIndent;
var decreaseIndent = writer.decreaseIndent;
var currentSourceFile;
var extendsEmitted = false;
var tempCount = 0;
var tempVariables;
var tempParameters;
var writeEmittedFiles = writeJavaScriptFile;
var emitLeadingComments = compilerOptions.removeComments ? function (node) { } : emitLeadingDeclarationComments;
var emitTrailingComments = compilerOptions.removeComments ? function (node) { } : emitTrailingDeclarationComments;
var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) { } : emitLeadingCommentsOfLocalPosition;
var detachedCommentsInfo;
var emitDetachedComments = compilerOptions.removeComments ? function (node) { } : emitDetachedCommentsAtPosition;
var emitPinnedOrTripleSlashComments = compilerOptions.removeComments ? function (node) { } : emitPinnedOrTripleSlashCommentsOfNode;
var writeComment = writeCommentRange;
var emit = emitNode;
var emitStart = function (node) { };
var emitEnd = function (node) { };
var emitToken = emitTokenText;
var scopeEmitStart = function (scopeDeclaration, scopeName) { };
var scopeEmitEnd = function () { };
var sourceMapData;
if (compilerOptions.sourceMap) {
initializeEmitterWithSourceMaps();
}
if (root) {
emit(root);
}
else {
ts.forEach(host.getSourceFiles(), function (sourceFile) {
if (!isExternalModuleOrDeclarationFile(sourceFile)) {
emit(sourceFile);
}
});
}
writeLine();
writeEmittedFiles(writer.getText(), compilerOptions.emitBOM);
return;
function initializeEmitterWithSourceMaps() {
var sourceMapDir;
var sourceMapSourceIndex = -1;
var sourceMapNameIndexMap = {};
var sourceMapNameIndices = [];
function getSourceMapNameIndex() {
return sourceMapNameIndices.length ? sourceMapNameIndices[sourceMapNameIndices.length - 1] : -1;
}
var lastRecordedSourceMapSpan;
var lastEncodedSourceMapSpan = {
emittedLine: 1,
emittedColumn: 1,
sourceLine: 1,
sourceColumn: 1,
sourceIndex: 0
};
var lastEncodedNameIndex = 0;
function encodeLastRecordedSourceMapSpan() {
if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) {
return;
}
var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn;
if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) {
if (sourceMapData.sourceMapMappings) {
sourceMapData.sourceMapMappings += ",";
}
}
else {
for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) {
sourceMapData.sourceMapMappings += ";";
}
prevEncodedEmittedColumn = 1;
}
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn);
if (lastRecordedSourceMapSpan.nameIndex >= 0) {
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex);
lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex;
}
lastEncodedSourceMapSpan = lastRecordedSourceMapSpan;
sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan);
function base64VLQFormatEncode(inValue) {
function base64FormatEncode(inValue) {
if (inValue < 64) {
return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue);
}
throw TypeError(inValue + ": not a 64 based value");
}
if (inValue < 0) {
inValue = ((-inValue) << 1) + 1;
}
else {
inValue = inValue << 1;
}
var encodedStr = "";
do {
var currentDigit = inValue & 31;
inValue = inValue >> 5;
if (inValue > 0) {
currentDigit = currentDigit | 32;
}
encodedStr = encodedStr + base64FormatEncode(currentDigit);
} while (inValue > 0);
return encodedStr;
}
}
function recordSourceMapSpan(pos) {
var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, pos);
sourceLinePos.line++;
sourceLinePos.character++;
var emittedLine = writer.getLine();
var emittedColumn = writer.getColumn();
if (!lastRecordedSourceMapSpan ||
lastRecordedSourceMapSpan.emittedLine != emittedLine ||
lastRecordedSourceMapSpan.emittedColumn != emittedColumn ||
(lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex &&
(lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line ||
(lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) {
encodeLastRecordedSourceMapSpan();
lastRecordedSourceMapSpan = {
emittedLine: emittedLine,
emittedColumn: emittedColumn,
sourceLine: sourceLinePos.line,
sourceColumn: sourceLinePos.character,
nameIndex: getSourceMapNameIndex(),
sourceIndex: sourceMapSourceIndex
};
}
else {
lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line;
lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character;
lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex;
}
}
function recordEmitNodeStartSpan(node) {
recordSourceMapSpan(ts.skipTrivia(currentSourceFile.text, node.pos));
}
function recordEmitNodeEndSpan(node) {
recordSourceMapSpan(node.end);
}
function writeTextWithSpanRecord(tokenKind, startPos, emitFn) {
var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos);
recordSourceMapSpan(tokenStartPos);
var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn);
recordSourceMapSpan(tokenEndPos);
return tokenEndPos;
}
function recordNewSourceFileStart(node) {
var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir;
sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true));
sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1;
sourceMapData.inputSourceFileNames.push(node.fileName);
}
function recordScopeNameOfNode(node, scopeName) {
function recordScopeNameIndex(scopeNameIndex) {
sourceMapNameIndices.push(scopeNameIndex);
}
function recordScopeNameStart(scopeName) {
var scopeNameIndex = -1;
if (scopeName) {
var parentIndex = getSourceMapNameIndex();
if (parentIndex !== -1) {
var name = node.name;
if (!name || name.kind !== 124) {
scopeName = "." + scopeName;
}
scopeName = sourceMapData.sourceMapNames[parentIndex] + scopeName;
}
scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName);
if (scopeNameIndex === undefined) {
scopeNameIndex = sourceMapData.sourceMapNames.length;
sourceMapData.sourceMapNames.push(scopeName);
sourceMapNameIndexMap[scopeName] = scopeNameIndex;
}
}
recordScopeNameIndex(scopeNameIndex);
}
if (scopeName) {
recordScopeNameStart(scopeName);
}
else if (node.kind === 193 ||
node.kind === 158 ||
node.kind === 130 ||
node.kind === 129 ||
node.kind === 132 ||
node.kind === 133 ||
node.kind === 198 ||
node.kind === 194 ||
node.kind === 197) {
if (node.name) {
var name = node.name;
scopeName = name.kind === 124 ? ts.getTextOfNode(name) : node.name.text;
}
recordScopeNameStart(scopeName);
}
else {
recordScopeNameIndex(getSourceMapNameIndex());
}
}
function recordScopeNameEnd() {
sourceMapNameIndices.pop();
}
;
function writeCommentRangeWithMap(curentSourceFile, writer, comment, newLine) {
recordSourceMapSpan(comment.pos);
writeCommentRange(currentSourceFile, writer, comment, newLine);
recordSourceMapSpan(comment.end);
}
function serializeSourceMapContents(version, file, sourceRoot, sources, names, mappings) {
if (typeof JSON !== "undefined") {
return JSON.stringify({
version: version,
file: file,
sourceRoot: sourceRoot,
sources: sources,
names: names,
mappings: mappings
});
}
return "{\"version\":" + version + ",\"file\":\"" + ts.escapeString(file) + "\",\"sourceRoot\":\"" + ts.escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + ts.escapeString(mappings) + "\"}";
function serializeStringArray(list) {
var output = "";
for (var i = 0, n = list.length; i < n; i++) {
if (i) {
output += ",";
}
output += "\"" + ts.escapeString(list[i]) + "\"";
}
return output;
}
}
function writeJavaScriptAndSourceMapFile(emitOutput, writeByteOrderMark) {
encodeLastRecordedSourceMapSpan();
writeFile(host, diagnostics, sourceMapData.sourceMapFilePath, serializeSourceMapContents(3, sourceMapData.sourceMapFile, sourceMapData.sourceMapSourceRoot, sourceMapData.sourceMapSources, sourceMapData.sourceMapNames, sourceMapData.sourceMapMappings), false);
sourceMapDataList.push(sourceMapData);
writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL, writeByteOrderMark);
}
var sourceMapJsFile = ts.getBaseFileName(ts.normalizeSlashes(jsFilePath));
sourceMapData = {
sourceMapFilePath: jsFilePath + ".map",
jsSourceMappingURL: sourceMapJsFile + ".map",
sourceMapFile: sourceMapJsFile,
sourceMapSourceRoot: compilerOptions.sourceRoot || "",
sourceMapSources: [],
inputSourceFileNames: [],
sourceMapNames: [],
sourceMapMappings: "",
sourceMapDecodedMappings: []
};
sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot);
if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) {
sourceMapData.sourceMapSourceRoot += ts.directorySeparator;
}
if (compilerOptions.mapRoot) {
sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot);
if (root) {
sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(root, host, sourceMapDir));
}
if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) {
sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), host.getCurrentDirectory(), host.getCanonicalFileName, true);
}
else {
sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL);
}
}
else {
sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath));
}
function emitNodeWithMap(node) {
if (node) {
if (node.kind != 210) {
recordEmitNodeStartSpan(node);
emitNode(node);
recordEmitNodeEndSpan(node);
}
else {
recordNewSourceFileStart(node);
emitNode(node);
}
}
}
writeEmittedFiles = writeJavaScriptAndSourceMapFile;
emit = emitNodeWithMap;
emitStart = recordEmitNodeStartSpan;
emitEnd = recordEmitNodeEndSpan;
emitToken = writeTextWithSpanRecord;
scopeEmitStart = recordScopeNameOfNode;
scopeEmitEnd = recordScopeNameEnd;
writeComment = writeCommentRangeWithMap;
}
function writeJavaScriptFile(emitOutput, writeByteOrderMark) {
writeFile(host, diagnostics, jsFilePath, emitOutput, writeByteOrderMark);
}
function createTempVariable(location, forLoopVariable) {
var name = forLoopVariable ? "_i" : undefined;
while (true) {
if (name && resolver.isUnknownIdentifier(location, name)) {
break;
}
name = "_" + (tempCount < 25 ? String.fromCharCode(tempCount + (tempCount < 8 ? 0 : 1) + 97) : tempCount - 25);
tempCount++;
}
var result = ts.createNode(64);
result.text = name;
return result;
}
function recordTempDeclaration(name) {
if (!tempVariables) {
tempVariables = [];
}
tempVariables.push(name);
}
function createAndRecordTempVariable(location) {
var temp = createTempVariable(location, false);
recordTempDeclaration(temp);
return temp;
}
function emitTempDeclarations(newLine) {
if (tempVariables) {
if (newLine) {
writeLine();
}
else {
write(" ");
}
write("var ");
emitCommaList(tempVariables);
write(";");
}
}
function emitTokenText(tokenKind, startPos, emitFn) {
var tokenString = ts.tokenToString(tokenKind);
if (emitFn) {
emitFn();
}
else {
write(tokenString);
}
return startPos + tokenString.length;
}
function emitOptional(prefix, node) {
if (node) {
write(prefix);
emit(node);
}
}
function emitParenthesized(node, parenthesized) {
if (parenthesized) {
write("(");
}
emit(node);
if (parenthesized) {
write(")");
}
}
function emitTrailingCommaIfPresent(nodeList) {
if (nodeList.hasTrailingComma) {
write(",");
}
}
function emitList(nodes, start, count, multiLine, trailingComma) {
for (var i = 0; i < count; i++) {
if (multiLine) {
if (i) {
write(",");
}
writeLine();
}
else {
if (i) {
write(", ");
}
}
emit(nodes[start + i]);
}
if (trailingComma) {
write(",");
}
if (multiLine) {
writeLine();
}
}
function emitCommaList(nodes) {
if (nodes) {
emitList(nodes, 0, nodes.length, false, false);
}
}
function emitLines(nodes) {
emitLinesStartingAt(nodes, 0);
}
function emitLinesStartingAt(nodes, startIndex) {
for (var i = startIndex; i < nodes.length; i++) {
writeLine();
emit(nodes[i]);
}
}
function isBinaryOrOctalIntegerLiteral(text) {
if (text.length <= 0) {
return false;
}
if (text.charCodeAt(1) === 66 || text.charCodeAt(1) === 98 ||
text.charCodeAt(1) === 79 || text.charCodeAt(1) === 111) {
return true;
}
return false;
}
function emitLiteral(node) {
var text = languageVersion < 2 && ts.isTemplateLiteralKind(node.kind) ? getTemplateLiteralAsStringLiteral(node) : node.parent ? ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node) : node.text;
if (compilerOptions.sourceMap && (node.kind === 8 || ts.isTemplateLiteralKind(node.kind))) {
writer.writeLiteral(text);
}
else if (languageVersion < 2 && node.kind === 7 && isBinaryOrOctalIntegerLiteral(text)) {
write(node.text);
}
else {
write(text);
}
}
function getTemplateLiteralAsStringLiteral(node) {
return '"' + ts.escapeString(node.text) + '"';
}
function emitTemplateExpression(node) {
if (languageVersion >= 2) {
ts.forEachChild(node, emit);
return;
}
var emitOuterParens = ts.isExpression(node.parent) && templateNeedsParens(node, node.parent);
if (emitOuterParens) {
write("(");
}
var headEmitted = false;
if (shouldEmitTemplateHead()) {
emitLiteral(node.head);
headEmitted = true;
}
for (var i = 0; i < node.templateSpans.length; i++) {
var templateSpan = node.templateSpans[i];
var needsParens = templateSpan.expression.kind !== 157 && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1;
if (i > 0 || headEmitted) {
write(" + ");
}
emitParenthesized(templateSpan.expression, needsParens);
if (templateSpan.literal.text.length !== 0) {
write(" + ");
emitLiteral(templateSpan.literal);
}
}
if (emitOuterParens) {
write(")");
}
function shouldEmitTemplateHead() {
ts.Debug.assert(node.templateSpans.length !== 0);
return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0;
}
function templateNeedsParens(template, parent) {
switch (parent.kind) {
case 153:
case 154:
return parent.expression === template;
case 155:
case 157:
return false;
default:
return comparePrecedenceToBinaryPlus(parent) !== -1;
}
}
function comparePrecedenceToBinaryPlus(expression) {
switch (expression.kind) {
case 165:
switch (expression.operatorToken.kind) {
case 35:
case 36:
case 37:
return 1;
case 33:
case 34:
return 0;
default:
return -1;
}
case 166:
return -1;
default:
return 1;
}
}
}
function emitTemplateSpan(span) {
emit(span.expression);
emit(span.literal);
}
function emitExpressionForPropertyName(node) {
ts.Debug.assert(node.kind !== 148);
if (node.kind === 8) {
emitLiteral(node);
}
else if (node.kind === 124) {
emit(node.expression);
}
else {
write("\"");
if (node.kind === 7) {
write(node.text);
}
else {
writeTextOfNode(currentSourceFile, node);
}
write("\"");
}
}
function isNotExpressionIdentifier(node) {
var parent = node.parent;
switch (parent.kind) {
case 126:
case 191:
case 148:
case 128:
case 127:
case 207:
case 208:
case 209:
case 130:
case 129:
case 193:
case 132:
case 133:
case 158:
case 194:
case 195:
case 197:
case 198:
case 200:
return parent.name === node;
case 183:
case 182:
case 201:
return false;
case 187:
return node.parent.label === node;
case 206:
return node.parent.name === node;
}
}
function emitExpressionIdentifier(node) {
var prefix = resolver.getExpressionNamePrefix(node);
if (prefix) {
write(prefix);
write(".");
}
writeTextOfNode(currentSourceFile, node);
}
function emitIdentifier(node) {
if (!node.parent) {
write(node.text);
}
else if (!isNotExpressionIdentifier(node)) {
emitExpressionIdentifier(node);
}
else {
writeTextOfNode(currentSourceFile, node);
}
}
function emitThis(node) {
if (resolver.getNodeCheckFlags(node) & 2) {
write("_this");
}
else {
write("this");
}
}
function emitSuper(node) {
var flags = resolver.getNodeCheckFlags(node);
if (flags & 16) {
write("_super.prototype");
}
else if (flags & 32) {
write("_super");
}
else {
write("super");
}
}
function emitObjectBindingPattern(node) {
write("{ ");
var elements = node.elements;
emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
write(" }");
}
function emitArrayBindingPattern(node) {
write("[");
var elements = node.elements;
emitList(elements, 0, elements.length, false, elements.hasTrailingComma);
write("]");
}
function emitBindingElement(node) {
if (node.propertyName) {
emit(node.propertyName);
write(": ");
}
if (node.dotDotDotToken) {
write("...");
}
if (ts.isBindingPattern(node.name)) {
emit(node.name);
}
else {
emitModuleMemberName(node);
}
emitOptional(" = ", node.initializer);
}
function emitSpreadElementExpression(node) {
write("...");
emit(node.expression);
}
function needsParenthesisForPropertyAccess(node) {
switch (node.kind) {
case 64:
case 149:
case 151:
case 152:
case 153:
case 157:
return false;
}
return true;
}
function emitListWithSpread(elements, multiLine, trailingComma) {
var pos = 0;
var group = 0;
var length = elements.length;
while (pos < length) {
if (group === 1) {
write(".concat(");
}
else if (group > 1) {
write(", ");
}
var e = elements[pos];
if (e.kind === 169) {
e = e.expression;
emitParenthesized(e, group === 0 && needsParenthesisForPropertyAccess(e));
pos++;
}
else {
var i = pos;
while (i < length && elements[i].kind !== 169) {
i++;
}
write("[");
if (multiLine) {
increaseIndent();
}
emitList(elements, pos, i - pos, multiLine, trailingComma && i === length);
if (multiLine) {
decreaseIndent();
}
write("]");
pos = i;
}
group++;
}
if (group > 1) {
write(")");
}
}
function emitArrayLiteral(node) {
var elements = node.elements;
if (elements.length === 0) {
write("[]");
}
else if (languageVersion >= 2) {
write("[");
var multiLine = (node.flags & 256) !== 0;
if (multiLine) {
increaseIndent();
}
emitList(elements, 0, elements.length, multiLine, elements.hasTrailingComma);
if (multiLine) {
decreaseIndent();
}
write("]");
}
else {
emitListWithSpread(elements, (node.flags & 256) !== 0, elements.hasTrailingComma);
}
}
function emitObjectLiteralBody(node, numElements) {
write("{");
var multiLine = (node.flags & 256) !== 0;
if (numElements > 0) {
var properties = node.properties;
if (!multiLine) {
write(" ");
}
else {
increaseIndent();
}
emitList(properties, 0, numElements, multiLine, properties.hasTrailingComma && languageVersion >= 1);
if (!multiLine) {
write(" ");
}
else {
decreaseIndent();
}
}
write("}");
}
function createSynthesizedNode(kind) {
var node = ts.createNode(kind);
node.pos = -1;
node.end = -1;
return node;
}
function emitDownlevelObjectLiteralWithComputedProperties(node, firstComputedPropertyIndex) {
var parenthesizedObjectLiteral = createDownlevelObjectLiteralWithComputedProperties(node, firstComputedPropertyIndex);
return emit(parenthesizedObjectLiteral);
}
function createDownlevelObjectLiteralWithComputedProperties(originalObjectLiteral, firstComputedPropertyIndex) {
var tempVar = createAndRecordTempVariable(originalObjectLiteral);
var initialObjectLiteral = createSynthesizedNode(150);
initialObjectLiteral.properties = originalObjectLiteral.properties.slice(0, firstComputedPropertyIndex);
initialObjectLiteral.flags |= 256;
var propertyPatches = createBinaryExpression(tempVar, 52, initialObjectLiteral);
ts.forEach(originalObjectLiteral.properties, function (property) {
var patchedProperty = tryCreatePatchingPropertyAssignment(originalObjectLiteral, tempVar, property);
if (patchedProperty) {
propertyPatches = createBinaryExpression(propertyPatches, 23, patchedProperty);
}
});
propertyPatches = createBinaryExpression(propertyPatches, 23, tempVar);
var result = createParenthesizedExpression(propertyPatches);
return result;
}
function addCommentsToSynthesizedNode(node, leadingCommentRanges, trailingCommentRanges) {
node.leadingCommentRanges = leadingCommentRanges;
node.trailingCommentRanges = trailingCommentRanges;
}
function tryCreatePatchingPropertyAssignment(objectLiteral, tempVar, property) {
var leftHandSide = createMemberAccessForPropertyName(tempVar, property.name);
var maybeRightHandSide = tryGetRightHandSideOfPatchingPropertyAssignment(objectLiteral, property);
return maybeRightHandSide && createBinaryExpression(leftHandSide, 52, maybeRightHandSide);
}
function tryGetRightHandSideOfPatchingPropertyAssignment(objectLiteral, property) {
switch (property.kind) {
case 207:
return property.initializer;
case 208:
var prefix = createIdentifier(resolver.getExpressionNamePrefix(property.name));
return createPropertyAccessExpression(prefix, property.name);
case 130:
return createFunctionExpression(property.parameters, property.body);
case 132:
case 133:
var _a = getAllAccessorDeclarations(objectLiteral.properties, property), firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor;
if (firstAccessor !== property) {
return undefined;
}
var propertyDescriptor = createSynthesizedNode(150);
var descriptorProperties = [];
if (getAccessor) {
var getProperty = createPropertyAssignment(createIdentifier("get"), createFunctionExpression(getAccessor.parameters, getAccessor.body));
descriptorProperties.push(getProperty);
}
if (setAccessor) {
var setProperty = createPropertyAssignment(createIdentifier("set"), createFunctionExpression(setAccessor.parameters, setAccessor.body));
descriptorProperties.push(setProperty);
}
var trueExpr = createSynthesizedNode(94);
var enumerableTrue = createPropertyAssignment(createIdentifier("enumerable"), trueExpr);
descriptorProperties.push(enumerableTrue);
var configurableTrue = createPropertyAssignment(createIdentifier("configurable"), trueExpr);
descriptorProperties.push(configurableTrue);
propertyDescriptor.properties = descriptorProperties;
var objectDotDefineProperty = createPropertyAccessExpression(createIdentifier("Object"), createIdentifier("defineProperty"));
return createCallExpression(objectDotDefineProperty, createNodeArray(propertyDescriptor));
default:
ts.Debug.fail("ObjectLiteralElement kind " + property.kind + " not accounted for.");
}
}
function createParenthesizedExpression(expression) {
var result = createSynthesizedNode(157);
result.expression = expression;
return result;
}
function createNodeArray() {
var elements = [];
for (var _i = 0; _i < arguments.length; _i++) {
elements[_i - 0] = arguments[_i];
}
var result = elements;
result.pos = -1;
result.end = -1;
return result;
}
function createBinaryExpression(left, operator, right) {
var result = createSynthesizedNode(165);
result.operatorToken = createSynthesizedNode(operator);
result.left = left;
result.right = right;
return result;
}
function createMemberAccessForPropertyName(expression, memberName) {
if (memberName.kind === 64) {
return createPropertyAccessExpression(expression, memberName);
}
else if (memberName.kind === 8 || memberName.kind === 7) {
return createElementAccessExpression(expression, memberName);
}
else if (memberName.kind === 124) {
return createElementAccessExpression(expression, memberName.expression);
}
else {
ts.Debug.fail("Kind '" + memberName.kind + "' not accounted for.");
}
}
function createPropertyAssignment(name, initializer) {
var result = createSynthesizedNode(207);
result.name = name;
result.initializer = initializer;
return result;
}
function createFunctionExpression(parameters, body) {
var result = createSynthesizedNode(158);
result.parameters = parameters;
result.body = body;
return result;
}
function createPropertyAccessExpression(expression, name) {
var result = createSynthesizedNode(151);
result.expression = expression;
result.name = name;
return result;
}
function createElementAccessExpression(expression, argumentExpression) {
var result = createSynthesizedNode(152);
result.expression = expression;
result.argumentExpression = argumentExpression;
return result;
}
function createIdentifier(name) {
var result = createSynthesizedNode(64);
result.text = name;
return result;
}
function createCallExpression(invokedExpression, arguments) {
var result = createSynthesizedNode(153);
result.expression = invokedExpression;
result.arguments = arguments;
return result;
}
function emitObjectLiteral(node) {
var properties = node.properties;
if (languageVersion < 2) {
var numProperties = properties.length;
var numInitialNonComputedProperties = numProperties;
for (var i = 0, n = properties.length; i < n; i++) {
if (properties[i].name.kind === 124) {
numInitialNonComputedProperties = i;
break;
}
}
var hasComputedProperty = numInitialNonComputedProperties !== properties.length;
if (hasComputedProperty) {
emitDownlevelObjectLiteralWithComputedProperties(node, numInitialNonComputedProperties);
return;
}
}
emitObjectLiteralBody(node, properties.length);
}
function emitComputedPropertyName(node) {
write("[");
emit(node.expression);
write("]");
}
function emitMethod(node) {
emit(node.name);
if (languageVersion < 2) {
write(": function ");
}
emitSignatureAndBody(node);
}
function emitPropertyAssignment(node) {
emit(node.name);
write(": ");
emit(node.initializer);
}
function emitShorthandPropertyAssignment(node) {
emit(node.name);
if (languageVersion <= 1 || resolver.getExpressionNamePrefix(node.name)) {
write(": ");
emitExpressionIdentifier(node.name);
}
}
function tryEmitConstantValue(node) {
var constantValue = resolver.getConstantValue(node);
if (constantValue !== undefined) {
write(constantValue.toString());
if (!compilerOptions.removeComments) {
var propertyName = node.kind === 151 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression);
write(" /* " + propertyName + " */");
}
return true;
}
return false;
}
function emitPropertyAccess(node) {
if (tryEmitConstantValue(node)) {
return;
}
emit(node.expression);
write(".");
emit(node.name);
}
function emitQualifiedName(node) {
emit(node.left);
write(".");
emit(node.right);
}
function emitIndexedAccess(node) {
if (tryEmitConstantValue(node)) {
return;
}
emit(node.expression);
write("[");
emit(node.argumentExpression);
write("]");
}
function hasSpreadElement(elements) {
return ts.forEach(elements, function (e) { return e.kind === 169; });
}
function skipParentheses(node) {
while (node.kind === 157 || node.kind === 156) {
node = node.expression;
}
return node;
}
function emitCallTarget(node) {
if (node.kind === 64 || node.kind === 92 || node.kind === 90) {
emit(node);
return node;
}
var temp = createAndRecordTempVariable(node);
write("(");
emit(temp);
write(" = ");
emit(node);
write(")");
return temp;
}
function emitCallWithSpread(node) {
var target;
var expr = skipParentheses(node.expression);
if (expr.kind === 151) {
target = emitCallTarget(expr.expression);
write(".");
emit(expr.name);
}
else if (expr.kind === 152) {
target = emitCallTarget(expr.expression);
write("[");
emit(expr.argumentExpression);
write("]");
}
else if (expr.kind === 90) {
target = expr;
write("_super");
}
else {
emit(node.expression);
}
write(".apply(");
if (target) {
if (target.kind === 90) {
emitThis(target);
}
else {
emit(target);
}
}
else {
write("void 0");
}
write(", ");
emitListWithSpread(node.arguments, false, false);
write(")");
}
function emitCallExpression(node) {
if (languageVersion < 2 && hasSpreadElement(node.arguments)) {
emitCallWithSpread(node);
return;
}
var superCall = false;
if (node.expression.kind === 90) {
write("_super");
superCall = true;
}
else {
emit(node.expression);
superCall = node.expression.kind === 151 && node.expression.expression.kind === 90;
}
if (superCall) {
write(".call(");
emitThis(node.expression);
if (node.arguments.length) {
write(", ");
emitCommaList(node.arguments);
}
write(")");
}
else {
write("(");
emitCommaList(node.arguments);
write(")");
}
}
function emitNewExpression(node) {
write("new ");
emit(node.expression);
if (node.arguments) {
write("(");
emitCommaList(node.arguments);
write(")");
}
}
function emitTaggedTemplateExpression(node) {
emit(node.tag);
write(" ");
emit(node.template);
}
function emitParenExpression(node) {
if (node.expression.kind === 156) {
var operand = node.expression.expression;
while (operand.kind == 156) {
operand = operand.expression;
}
if (operand.kind !== 163 &&
operand.kind !== 162 &&
operand.kind !== 161 &&
operand.kind !== 160 &&
operand.kind !== 164 &&
operand.kind !== 154 &&
!(operand.kind === 153 && node.parent.kind === 154) &&
!(operand.kind === 158 && node.parent.kind === 153)) {
emit(operand);
return;
}
}
write("(");
emit(node.expression);
write(")");
}
function emitDeleteExpression(node) {
write(ts.tokenToString(73));
write(" ");
emit(node.expression);
}
function emitVoidExpression(node) {
write(ts.tokenToString(98));
write(" ");
emit(node.expression);
}
function emitTypeOfExpression(node) {
write(ts.tokenToString(96));
write(" ");
emit(node.expression);
}
function emitPrefixUnaryExpression(node) {
write(ts.tokenToString(node.operator));
if (node.operand.kind === 163) {
var operand = node.operand;
if (node.operator === 33 && (operand.operator === 33 || operand.operator === 38)) {
write(" ");
}
else if (node.operator === 34 && (operand.operator === 34 || operand.operator === 39)) {
write(" ");
}
}
emit(node.operand);
}
function emitPostfixUnaryExpression(node) {
emit(node.operand);
write(ts.tokenToString(node.operator));
}
function emitBinaryExpression(node) {
if (languageVersion < 2 && node.operatorToken.kind === 52 &&
(node.left.kind === 150 || node.left.kind === 149)) {
emitDestructuring(node);
}
else {
emit(node.left);
if (node.operatorToken.kind !== 23) {
write(" ");
}
write(ts.tokenToString(node.operatorToken.kind));
var operatorEnd = ts.getLineAndCharacterOfPosition(currentSourceFile, node.operatorToken.end);
var rightStart = ts.getLineAndCharacterOfPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.right.pos));
var onDifferentLine = operatorEnd.line !== rightStart.line;
if (onDifferentLine) {
var exprStart = ts.getLineAndCharacterOfPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos));
var firstCharOfExpr = getFirstNonWhitespaceCharacterIndexOnLine(exprStart.line);
var shouldIndent = rightStart.character > firstCharOfExpr;
if (shouldIndent) {
increaseIndent();
}
writeLine();
}
else {
write(" ");
}
emit(node.right);
if (shouldIndent) {
decreaseIndent();
}
}
}
function getFirstNonWhitespaceCharacterIndexOnLine(line) {
var lineStart = ts.getLineStarts(currentSourceFile)[line];
var text = currentSourceFile.text;
for (var i = lineStart; i < text.length; i++) {
var ch = text.charCodeAt(i);
if (!ts.isWhiteSpace(text.charCodeAt(i)) || ts.isLineBreak(ch)) {
break;
}
}
return i - lineStart;
}
function emitConditionalExpression(node) {
emit(node.condition);
write(" ? ");
emit(node.whenTrue);
write(" : ");
emit(node.whenFalse);
}
function isSingleLineBlock(node) {
if (node && node.kind === 172) {
var block = node;
return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block);
}
}
function emitBlock(node) {
if (isSingleLineBlock(node)) {
emitToken(14, node.pos);
write(" ");
emitToken(15, node.statements.end);
return;
}
emitToken(14, node.pos);
increaseIndent();
scopeEmitStart(node.parent);
if (node.kind === 199) {
ts.Debug.assert(node.parent.kind === 198);
emitCaptureThisForNodeIfNecessary(node.parent);
}
emitLines(node.statements);
if (node.kind === 199) {
emitTempDeclarations(true);
}
decreaseIndent();
writeLine();
emitToken(15, node.statements.end);
scopeEmitEnd();
}
function emitEmbeddedStatement(node) {
if (node.kind === 172) {
write(" ");
emit(node);
}
else {
increaseIndent();
writeLine();
emit(node);
decreaseIndent();
}
}
function emitExpressionStatement(node) {
emitParenthesized(node.expression, node.expression.kind === 159);
write(";");
}
function emitIfStatement(node) {
var endPos = emitToken(83, node.pos);
write(" ");
endPos = emitToken(16, endPos);
emit(node.expression);
emitToken(17, node.expression.end);
emitEmbeddedStatement(node.thenStatement);
if (node.elseStatement) {
writeLine();
emitToken(75, node.thenStatement.end);
if (node.elseStatement.kind === 176) {
write(" ");
emit(node.elseStatement);
}
else {
emitEmbeddedStatement(node.elseStatement);
}
}
}
function emitDoStatement(node) {
write("do");
emitEmbeddedStatement(node.statement);
if (node.statement.kind === 172) {
write(" ");
}
else {
writeLine();
}
write("while (");
emit(node.expression);
write(");");
}
function emitWhileStatement(node) {
write("while (");
emit(node.expression);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitForStatement(node) {
var endPos = emitToken(81, node.pos);
write(" ");
endPos = emitToken(16, endPos);
if (node.initializer && node.initializer.kind === 192) {
var variableDeclarationList = node.initializer;
var declarations = variableDeclarationList.declarations;
if (declarations[0] && ts.isLet(declarations[0])) {
emitToken(103, endPos);
}
else if (declarations[0] && ts.isConst(declarations[0])) {
emitToken(69, endPos);
}
else {
emitToken(97, endPos);
}
write(" ");
emitCommaList(variableDeclarationList.declarations);
}
else if (node.initializer) {
emit(node.initializer);
}
write(";");
emitOptional(" ", node.condition);
write(";");
emitOptional(" ", node.iterator);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitForInOrForOfStatement(node) {
var endPos = emitToken(81, node.pos);
write(" ");
endPos = emitToken(16, endPos);
if (node.initializer.kind === 192) {
var variableDeclarationList = node.initializer;
if (variableDeclarationList.declarations.length >= 1) {
var decl = variableDeclarationList.declarations[0];
if (ts.isLet(decl)) {
emitToken(103, endPos);
}
else {
emitToken(97, endPos);
}
write(" ");
emit(decl);
}
}
else {
emit(node.initializer);
}
if (node.kind === 180) {
write(" in ");
}
else {
write(" of ");
}
emit(node.expression);
emitToken(17, node.expression.end);
emitEmbeddedStatement(node.statement);
}
function emitBreakOrContinueStatement(node) {
emitToken(node.kind === 183 ? 65 : 70, node.pos);
emitOptional(" ", node.label);
write(";");
}
function emitReturnStatement(node) {
emitToken(89, node.pos);
emitOptional(" ", node.expression);
write(";");
}
function emitWithStatement(node) {
write("with (");
emit(node.expression);
write(")");
emitEmbeddedStatement(node.statement);
}
function emitSwitchStatement(node) {
var endPos = emitToken(91, node.pos);
write(" ");
emitToken(16, endPos);
emit(node.expression);
endPos = emitToken(17, node.expression.end);
write(" ");
emitToken(14, endPos);
increaseIndent();
emitLines(node.clauses);
decreaseIndent();
writeLine();
emitToken(15, node.clauses.end);
}
function isOnSameLine(node1, node2) {
return getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node1.pos)) ===
getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
}
function nodeEndIsOnSameLineAsNodeStart(node1, node2) {
return getLineOfLocalPosition(currentSourceFile, node1.end) ===
getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node2.pos));
}
function emitCaseOrDefaultClause(node) {
if (node.kind === 203) {
write("case ");
emit(node.expression);
write(":");
}
else {
write("default:");
}
if (node.statements.length === 1 && isOnSameLine(node, node.statements[0])) {
write(" ");
emit(node.statements[0]);
}
else {
increaseIndent();
emitLines(node.statements);
decreaseIndent();
}
}
function emitThrowStatement(node) {
write("throw ");
emit(node.expression);
write(";");
}
function emitTryStatement(node) {
write("try ");
emit(node.tryBlock);
emit(node.catchClause);
if (node.finallyBlock) {
writeLine();
write("finally ");
emit(node.finallyBlock);
}
}
function emitCatchClause(node) {
writeLine();
var endPos = emitToken(67, node.pos);
write(" ");
emitToken(16, endPos);
emit(node.name);
emitToken(17, node.name.end);
write(" ");
emitBlock(node.block);
}
function emitDebuggerStatement(node) {
emitToken(71, node.pos);
write(";");
}
function emitLabelledStatement(node) {
emit(node.label);
write(": ");
emit(node.statement);
}
function getContainingModule(node) {
do {
node = node.parent;
} while (node && node.kind !== 198);
return node;
}
function emitModuleMemberName(node) {
emitStart(node.name);
if (ts.getCombinedNodeFlags(node) & 1) {
var container = getContainingModule(node);
write(container ? resolver.getLocalNameOfContainer(container) : "exports");
write(".");
}
emitNode(node.name);
emitEnd(node.name);
}
function emitDestructuring(root, value) {
var emitCount = 0;
var isDeclaration = (root.kind === 191 && !(ts.getCombinedNodeFlags(root) & 1)) || root.kind === 126;
if (root.kind === 165) {
emitAssignmentExpression(root);
}
else {
emitBindingElement(root, value);
}
function emitAssignment(name, value) {
if (emitCount++) {
write(", ");
}
if (name.parent && (name.parent.kind === 191 || name.parent.kind === 148)) {
emitModuleMemberName(name.parent);
}
else {
emit(name);
}
write(" = ");
emit(value);
}
function ensureIdentifier(expr) {
if (expr.kind !== 64) {
var identifier = createTempVariable(root);
if (!isDeclaration) {
recordTempDeclaration(identifier);
}
emitAssignment(identifier, expr);
expr = identifier;
}
return expr;
}
function createVoidZero() {
var zero = ts.createNode(7);
zero.text = "0";
var result = ts.createNode(162);
result.expression = zero;
return result;
}
function createDefaultValueCheck(value, defaultValue) {
value = ensureIdentifier(value);
var equals = ts.createNode(165);
equals.left = value;
equals.operatorToken = ts.createNode(30);
equals.right = createVoidZero();
var cond = ts.createNode(166);
cond.condition = equals;
cond.whenTrue = defaultValue;
cond.whenFalse = value;
return cond;
}
function createNumericLiteral(value) {
var node = ts.createNode(7);
node.text = "" + value;
return node;
}
function parenthesizeForAccess(expr) {
if (expr.kind === 64 || expr.kind === 151 || expr.kind === 152) {
return expr;
}
var node = ts.createNode(157);
node.expression = expr;
return node;
}
function createPropertyAccess(object, propName) {
if (propName.kind !== 64) {
return createElementAccess(object, propName);
}
var node = ts.createNode(151);
node.expression = parenthesizeForAccess(object);
node.name = propName;
return node;
}
function createElementAccess(object, index) {
var node = ts.createNode(152);
node.expression = parenthesizeForAccess(object);
node.argumentExpression = index;
return node;
}
function emitObjectLiteralAssignment(target, value) {
var properties = target.properties;
if (properties.length !== 1) {
value = ensureIdentifier(value);
}
for (var i = 0; i < properties.length; i++) {
var p = properties[i];
if (p.kind === 207 || p.kind === 208) {
var propName = (p.name);
emitDestructuringAssignment(p.initializer || propName, createPropertyAccess(value, propName));
}
}
}
function emitArrayLiteralAssignment(target, value) {
var elements = target.elements;
if (elements.length !== 1) {
value = ensureIdentifier(value);
}
for (var i = 0; i < elements.length; i++) {
var e = elements[i];
if (e.kind !== 170) {
if (e.kind !== 169) {
emitDestructuringAssignment(e, createElementAccess(value, createNumericLiteral(i)));
}
else {
if (i === elements.length - 1) {
value = ensureIdentifier(value);
emitAssignment(e.expression, value);
write(".slice(" + i + ")");
}
}
}
}
}
function emitDestructuringAssignment(target, value) {
if (target.kind === 165 && target.operatorToken.kind === 52) {
value = createDefaultValueCheck(value, target.right);
target = target.left;
}
if (target.kind === 150) {
emitObjectLiteralAssignment(target, value);
}
else if (target.kind === 149) {
emitArrayLiteralAssignment(target, value);
}
else {
emitAssignment(target, value);
}
}
function emitAssignmentExpression(root) {
var target = root.left;
var value = root.right;
if (root.parent.kind === 175) {
emitDestructuringAssignment(target, value);
}
else {
if (root.parent.kind !== 157) {
write("(");
}
value = ensureIdentifier(value);
emitDestructuringAssignment(target, value);
write(", ");
emit(value);
if (root.parent.kind !== 157) {
write(")");
}
}
}
function emitBindingElement(target, value) {
if (target.initializer) {
value = value ? createDefaultValueCheck(value, target.initializer) : target.initializer;
}
else if (!value) {
value = createVoidZero();
}
if (ts.isBindingPattern(target.name)) {
var pattern = target.name;
var elements = pattern.elements;
if (elements.length !== 1) {
value = ensureIdentifier(value);
}
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (pattern.kind === 146) {
var propName = element.propertyName || element.name;
emitBindingElement(element, createPropertyAccess(value, propName));
}
else if (element.kind !== 170) {
if (!element.dotDotDotToken) {
emitBindingElement(element, createElementAccess(value, createNumericLiteral(i)));
}
else {
if (i === elements.length - 1) {
value = ensureIdentifier(value);
emitAssignment(element.name, value);
write(".slice(" + i + ")");
}
}
}
}
}
else {
emitAssignment(target.name, value);
}
}
}
function emitVariableDeclaration(node) {
if (ts.isBindingPattern(node.name)) {
if (languageVersion < 2) {
emitDestructuring(node);
}
else {
emit(node.name);
emitOptional(" = ", node.initializer);
}
}
else {
emitModuleMemberName(node);
emitOptional(" = ", node.initializer);
}
}
function emitVariableStatement(node) {
if (!(node.flags & 1)) {
if (ts.isLet(node.declarationList)) {
write("let ");
}
else if (ts.isConst(node.declarationList)) {
write("const ");
}
else {
write("var ");
}
}
emitCommaList(node.declarationList.declarations);
write(";");
}
function emitParameter(node) {
if (languageVersion < 2) {
if (ts.isBindingPattern(node.name)) {
var name = createTempVariable(node);
if (!tempParameters) {
tempParameters = [];
}
tempParameters.push(name);
emit(name);
}
else {
emit(node.name);
}
}
else {
if (node.dotDotDotToken) {
write("...");
}
emit(node.name);
emitOptional(" = ", node.initializer);
}
}
function emitDefaultValueAssignments(node) {
if (languageVersion < 2) {
var tempIndex = 0;
ts.forEach(node.parameters, function (p) {
if (ts.isBindingPattern(p.name)) {
writeLine();
write("var ");
emitDestructuring(p, tempParameters[tempIndex]);
write(";");
tempIndex++;
}
else if (p.initializer) {
writeLine();
emitStart(p);
write("if (");
emitNode(p.name);
write(" === void 0)");
emitEnd(p);
write(" { ");
emitStart(p);
emitNode(p.name);
write(" = ");
emitNode(p.initializer);
emitEnd(p);
write("; }");
}
});
}
}
function emitRestParameter(node) {
if (languageVersion < 2 && ts.hasRestParameters(node)) {
var restIndex = node.parameters.length - 1;
var restParam = node.parameters[restIndex];
var tempName = createTempVariable(node, true).text;
writeLine();
emitLeadingComments(restParam);
emitStart(restParam);
write("var ");
emitNode(restParam.name);
write(" = [];");
emitEnd(restParam);
emitTrailingComments(restParam);
writeLine();
write("for (");
emitStart(restParam);
write("var " + tempName + " = " + restIndex + ";");
emitEnd(restParam);
write(" ");
emitStart(restParam);
write(tempName + " < arguments.length;");
emitEnd(restParam);
write(" ");
emitStart(restParam);
write(tempName + "++");
emitEnd(restParam);
write(") {");
increaseIndent();
writeLine();
emitStart(restParam);
emitNode(restParam.name);
write("[" + tempName + " - " + restIndex + "] = arguments[" + tempName + "];");
emitEnd(restParam);
decreaseIndent();
writeLine();
write("}");
}
}
function emitAccessor(node) {
write(node.kind === 132 ? "get " : "set ");
emit(node.name);
emitSignatureAndBody(node);
}
function shouldEmitAsArrowFunction(node) {
return node.kind === 159 && languageVersion >= 2;
}
function emitFunctionDeclaration(node) {
if (ts.nodeIsMissing(node.body)) {
return emitPinnedOrTripleSlashComments(node);
}
if (node.kind !== 130 && node.kind !== 129) {
emitLeadingComments(node);
}
if (!shouldEmitAsArrowFunction(node)) {
write("function ");
}
if (node.kind === 193 || (node.kind === 158 && node.name)) {
emit(node.name);
}
emitSignatureAndBody(node);
if (node.kind !== 130 && node.kind !== 129) {
emitTrailingComments(node);
}
}
function emitCaptureThisForNodeIfNecessary(node) {
if (resolver.getNodeCheckFlags(node) & 4) {
writeLine();
emitStart(node);
write("var _this = this;");
emitEnd(node);
}
}
function emitSignatureParameters(node) {
increaseIndent();
write("(");
if (node) {
var parameters = node.parameters;
var omitCount = languageVersion < 2 && ts.hasRestParameters(node) ? 1 : 0;
emitList(parameters, 0, parameters.length - omitCount, false, false);
}
write(")");
decreaseIndent();
}
function emitSignatureParametersForArrow(node) {
if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) {
emit(node.parameters[0]);
return;
}
emitSignatureParameters(node);
}
function emitSignatureAndBody(node) {
var saveTempCount = tempCount;
var saveTempVariables = tempVariables;
var saveTempParameters = tempParameters;
tempCount = 0;
tempVariables = undefined;
tempParameters = undefined;
if (shouldEmitAsArrowFunction(node)) {
emitSignatureParametersForArrow(node);
write(" =>");
}
else {
emitSignatureParameters(node);
}
if (isSingleLineBlock(node.body)) {
write(" { }");
}
else {
write(" {");
scopeEmitStart(node);
if (!node.body) {
writeLine();
write("}");
}
else {
increaseIndent();
emitDetachedComments(node.body.kind === 172 ? node.body.statements : node.body);
var startIndex = 0;
if (node.body.kind === 172) {
startIndex = emitDirectivePrologues(node.body.statements, true);
}
var outPos = writer.getTextPos();
emitCaptureThisForNodeIfNecessary(node);
emitDefaultValueAssignments(node);
emitRestParameter(node);
if (node.body.kind !== 172 && outPos === writer.getTextPos()) {
decreaseIndent();
write(" ");
emitStart(node.body);
write("return ");
emitNode(node.body, true);
emitEnd(node.body);
write(";");
emitTempDeclarations(false);
write(" ");
emitStart(node.body);
write("}");
emitEnd(node.body);
}
else {
if (node.body.kind === 172) {
emitLinesStartingAt(node.body.statements, startIndex);
}
else {
writeLine();
emitLeadingComments(node.body);
write("return ");
emit(node.body, true);
write(";");
emitTrailingComments(node.body);
}
emitTempDeclarations(true);
writeLine();
if (node.body.kind === 172) {
emitLeadingCommentsOfPosition(node.body.statements.end);
decreaseIndent();
emitToken(15, node.body.statements.end);
}
else {
decreaseIndent();
emitStart(node.body);
write("}");
emitEnd(node.body);
}
}
}
scopeEmitEnd();
}
if (node.flags & 1) {
writeLine();
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
emitEnd(node);
write(";");
}
tempCount = saveTempCount;
tempVariables = saveTempVariables;
tempParameters = saveTempParameters;
}
function findInitialSuperCall(ctor) {
if (ctor.body) {
var statement = ctor.body.statements[0];
if (statement && statement.kind === 175) {
var expr = statement.expression;
if (expr && expr.kind === 153) {
var func = expr.expression;
if (func && func.kind === 90) {
return statement;
}
}
}
}
}
function emitParameterPropertyAssignments(node) {
ts.forEach(node.parameters, function (param) {
if (param.flags & 112) {
writeLine();
emitStart(param);
emitStart(param.name);
write("this.");
emitNode(param.name);
emitEnd(param.name);
write(" = ");
emit(param.name);
write(";");
emitEnd(param);
}
});
}
function emitMemberAccessForPropertyName(memberName) {
if (memberName.kind === 8 || memberName.kind === 7) {
write("[");
emitNode(memberName);
write("]");
}
else if (memberName.kind === 124) {
emitComputedPropertyName(memberName);
}
else {
write(".");
emitNode(memberName);
}
}
function emitMemberAssignments(node, staticFlag) {
ts.forEach(node.members, function (member) {
if (member.kind === 128 && (member.flags & 128) === staticFlag && member.initializer) {
writeLine();
emitLeadingComments(member);
emitStart(member);
emitStart(member.name);
if (staticFlag) {
emitNode(node.name);
}
else {
write("this");
}
emitMemberAccessForPropertyName(member.name);
emitEnd(member.name);
write(" = ");
emit(member.initializer);
write(";");
emitEnd(member);
emitTrailingComments(member);
}
});
}
function emitMemberFunctions(node) {
ts.forEach(node.members, function (member) {
if (member.kind === 130 || node.kind === 129) {
if (!member.body) {
return emitPinnedOrTripleSlashComments(member);
}
writeLine();
emitLeadingComments(member);
emitStart(member);
emitStart(member.name);
emitNode(node.name);
if (!(member.flags & 128)) {
write(".prototype");
}
emitMemberAccessForPropertyName(member.name);
emitEnd(member.name);
write(" = ");
emitStart(member);
emitFunctionDeclaration(member);
emitEnd(member);
emitEnd(member);
write(";");
emitTrailingComments(member);
}
else if (member.kind === 132 || member.kind === 133) {
var accessors = getAllAccessorDeclarations(node.members, member);
if (member === accessors.firstAccessor) {
writeLine();
emitStart(member);
write("Object.defineProperty(");
emitStart(member.name);
emitNode(node.name);
if (!(member.flags & 128)) {
write(".prototype");
}
write(", ");
emitExpressionForPropertyName(member.name);
emitEnd(member.name);
write(", {");
increaseIndent();
if (accessors.getAccessor) {
writeLine();
emitLeadingComments(accessors.getAccessor);
write("get: ");
emitStart(accessors.getAccessor);
write("function ");
emitSignatureAndBody(accessors.getAccessor);
emitEnd(accessors.getAccessor);
emitTrailingComments(accessors.getAccessor);
write(",");
}
if (accessors.setAccessor) {
writeLine();
emitLeadingComments(accessors.setAccessor);
write("set: ");
emitStart(accessors.setAccessor);
write("function ");
emitSignatureAndBody(accessors.setAccessor);
emitEnd(accessors.setAccessor);
emitTrailingComments(accessors.setAccessor);
write(",");
}
writeLine();
write("enumerable: true,");
writeLine();
write("configurable: true");
decreaseIndent();
writeLine();
write("});");
emitEnd(member);
}
}
});
}
function emitClassDeclaration(node) {
write("var ");
emit(node.name);
write(" = (function (");
var baseTypeNode = ts.getClassBaseTypeNode(node);
if (baseTypeNode) {
write("_super");
}
write(") {");
increaseIndent();
scopeEmitStart(node);
if (baseTypeNode) {
writeLine();
emitStart(baseTypeNode);
write("__extends(");
emit(node.name);
write(", _super);");
emitEnd(baseTypeNode);
}
writeLine();
emitConstructorOfClass();
emitMemberFunctions(node);
emitMemberAssignments(node, 128);
writeLine();
function emitClassReturnStatement() {
write("return ");
emitNode(node.name);
}
emitToken(15, node.members.end, emitClassReturnStatement);
write(";");
decreaseIndent();
writeLine();
emitToken(15, node.members.end);
scopeEmitEnd();
emitStart(node);
write(")(");
if (baseTypeNode) {
emit(baseTypeNode.typeName);
}
write(");");
emitEnd(node);
if (node.flags & 1) {
writeLine();
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
emitEnd(node);
write(";");
}
function emitConstructorOfClass() {
var saveTempCount = tempCount;
var saveTempVariables = tempVariables;
var saveTempParameters = tempParameters;
tempCount = 0;
tempVariables = undefined;
tempParameters = undefined;
ts.forEach(node.members, function (member) {
if (member.kind === 131 && !member.body) {
emitPinnedOrTripleSlashComments(member);
}
});
var ctor = getFirstConstructorWithBody(node);
if (ctor) {
emitLeadingComments(ctor);
}
emitStart(ctor || node);
write("function ");
emit(node.name);
emitSignatureParameters(ctor);
write(" {");
scopeEmitStart(node, "constructor");
increaseIndent();
if (ctor) {
emitDetachedComments(ctor.body.statements);
}
emitCaptureThisForNodeIfNecessary(node);
if (ctor) {
emitDefaultValueAssignments(ctor);
emitRestParameter(ctor);
if (baseTypeNode) {
var superCall = findInitialSuperCall(ctor);
if (superCall) {
writeLine();
emit(superCall);
}
}
emitParameterPropertyAssignments(ctor);
}
else {
if (baseTypeNode) {
writeLine();
emitStart(baseTypeNode);
write("_super.apply(this, arguments);");
emitEnd(baseTypeNode);
}
}
emitMemberAssignments(node, 0);
if (ctor) {
var statements = ctor.body.statements;
if (superCall)
statements = statements.slice(1);
emitLines(statements);
}
emitTempDeclarations(true);
writeLine();
if (ctor) {
emitLeadingCommentsOfPosition(ctor.body.statements.end);
}
decreaseIndent();
emitToken(15, ctor ? ctor.body.statements.end : node.members.end);
scopeEmitEnd();
emitEnd(ctor || node);
if (ctor) {
emitTrailingComments(ctor);
}
tempCount = saveTempCount;
tempVariables = saveTempVariables;
tempParameters = saveTempParameters;
}
}
function emitInterfaceDeclaration(node) {
emitPinnedOrTripleSlashComments(node);
}
function shouldEmitEnumDeclaration(node) {
var isConstEnum = ts.isConst(node);
return !isConstEnum || compilerOptions.preserveConstEnums;
}
function emitEnumDeclaration(node) {
if (!shouldEmitEnumDeclaration(node)) {
return;
}
if (!(node.flags & 1)) {
emitStart(node);
write("var ");
emit(node.name);
emitEnd(node);
write(";");
}
writeLine();
emitStart(node);
write("(function (");
emitStart(node.name);
write(resolver.getLocalNameOfContainer(node));
emitEnd(node.name);
write(") {");
increaseIndent();
scopeEmitStart(node);
emitLines(node.members);
decreaseIndent();
writeLine();
emitToken(15, node.members.end);
scopeEmitEnd();
write(")(");
emitModuleMemberName(node);
write(" || (");
emitModuleMemberName(node);
write(" = {}));");
emitEnd(node);
if (node.flags & 1) {
writeLine();
emitStart(node);
write("var ");
emit(node.name);
write(" = ");
emitModuleMemberName(node);
emitEnd(node);
write(";");
}
}
function emitEnumMember(node) {
var enumParent = node.parent;
emitStart(node);
write(resolver.getLocalNameOfContainer(enumParent));
write("[");
write(resolver.getLocalNameOfContainer(enumParent));
write("[");
emitExpressionForPropertyName(node.name);
write("] = ");
writeEnumMemberDeclarationValue(node);
write("] = ");
emitExpressionForPropertyName(node.name);
emitEnd(node);
write(";");
}
function writeEnumMemberDeclarationValue(member) {
if (!member.initializer || ts.isConst(member.parent)) {
var value = resolver.getConstantValue(member);
if (value !== undefined) {
write(value.toString());
return;
}
}
if (member.initializer) {
emit(member.initializer);
}
else {
write("undefined");
}
}
function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
if (moduleDeclaration.body.kind === 198) {
var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
return recursiveInnerModule || moduleDeclaration.body;
}
}
function shouldEmitModuleDeclaration(node) {
return ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums);
}
function emitModuleDeclaration(node) {
var shouldEmit = shouldEmitModuleDeclaration(node);
if (!shouldEmit) {
return emitPinnedOrTripleSlashComments(node);
}
emitStart(node);
write("var ");
emit(node.name);
write(";");
emitEnd(node);
writeLine();
emitStart(node);
write("(function (");
emitStart(node.name);
write(resolver.getLocalNameOfContainer(node));
emitEnd(node.name);
write(") ");
if (node.body.kind === 199) {
var saveTempCount = tempCount;
var saveTempVariables = tempVariables;
tempCount = 0;
tempVariables = undefined;
emit(node.body);
tempCount = saveTempCount;
tempVariables = saveTempVariables;
}
else {
write("{");
increaseIndent();
scopeEmitStart(node);
emitCaptureThisForNodeIfNecessary(node);
writeLine();
emit(node.body);
decreaseIndent();
writeLine();
var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body;
emitToken(15, moduleBlock.statements.end);
scopeEmitEnd();
}
write(")(");
if (node.flags & 1) {
emit(node.name);
write(" = ");
}
emitModuleMemberName(node);
write(" || (");
emitModuleMemberName(node);
write(" = {}));");
emitEnd(node);
}
function emitImportDeclaration(node) {
var emitImportDeclaration = resolver.isReferencedImportDeclaration(node);
if (!emitImportDeclaration) {
emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportWithEntityName(node);
}
if (emitImportDeclaration) {
if (ts.isExternalModuleImportDeclaration(node) && node.parent.kind === 210 && compilerOptions.module === 2) {
if (node.flags & 1) {
writeLine();
emitLeadingComments(node);
emitStart(node);
emitModuleMemberName(node);
write(" = ");
emit(node.name);
write(";");
emitEnd(node);
emitTrailingComments(node);
}
}
else {
writeLine();
emitLeadingComments(node);
emitStart(node);
if (!(node.flags & 1))
write("var ");
emitModuleMemberName(node);
write(" = ");
if (ts.isInternalModuleImportDeclaration(node)) {
emit(node.moduleReference);
}
else {
var literal = ts.getExternalModuleImportDeclarationExpression(node);
write("require(");
emitStart(literal);
emitLiteral(literal);
emitEnd(literal);
emitToken(17, literal.end);
}
write(";");
emitEnd(node);
emitTrailingComments(node);
}
}
}
function getExternalImportDeclarations(node) {
var result = [];
ts.forEach(node.statements, function (statement) {
if (ts.isExternalModuleImportDeclaration(statement) && resolver.isReferencedImportDeclaration(statement)) {
result.push(statement);
}
});
return result;
}
function getFirstExportAssignment(sourceFile) {
return ts.forEach(sourceFile.statements, function (node) {
if (node.kind === 201) {
return node;
}
});
}
function sortAMDModules(amdModules) {
return amdModules.sort(function (moduleA, moduleB) {
if (moduleA.name === moduleB.name) {
return 0;
}
else if (!moduleA.name) {
return 1;
}
else {
return -1;
}
});
}
function emitAMDModule(node, startIndex) {
var imports = getExternalImportDeclarations(node);
writeLine();
write("define(");
sortAMDModules(node.amdDependencies);
if (node.amdModuleName) {
write("\"" + node.amdModuleName + "\", ");
}
write("[\"require\", \"exports\"");
ts.forEach(imports, function (imp) {
write(", ");
emitLiteral(ts.getExternalModuleImportDeclarationExpression(imp));
});
ts.forEach(node.amdDependencies, function (amdDependency) {
var text = "\"" + amdDependency.path + "\"";
write(", ");
write(text);
});
write("], function (require, exports");
ts.forEach(imports, function (imp) {
write(", ");
emit(imp.name);
});
ts.forEach(node.amdDependencies, function (amdDependency) {
if (amdDependency.name) {
write(", ");
write(amdDependency.name);
}
});
write(") {");
increaseIndent();
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
emitTempDeclarations(true);
var exportName = resolver.getExportAssignmentName(node);
if (exportName) {
writeLine();
var exportAssignment = getFirstExportAssignment(node);
emitStart(exportAssignment);
write("return ");
emitStart(exportAssignment.exportName);
write(exportName);
emitEnd(exportAssignment.exportName);
write(";");
emitEnd(exportAssignment);
}
decreaseIndent();
writeLine();
write("});");
}
function emitCommonJSModule(node, startIndex) {
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
emitTempDeclarations(true);
var exportName = resolver.getExportAssignmentName(node);
if (exportName) {
writeLine();
var exportAssignment = getFirstExportAssignment(node);
emitStart(exportAssignment);
write("module.exports = ");
emitStart(exportAssignment.exportName);
write(exportName);
emitEnd(exportAssignment.exportName);
write(";");
emitEnd(exportAssignment);
}
}
function emitDirectivePrologues(statements, startWithNewLine) {
for (var i = 0; i < statements.length; ++i) {
if (ts.isPrologueDirective(statements[i])) {
if (startWithNewLine || i > 0) {
writeLine();
}
emit(statements[i]);
}
else {
return i;
}
}
return statements.length;
}
function emitSourceFile(node) {
currentSourceFile = node;
writeLine();
emitDetachedComments(node);
var startIndex = emitDirectivePrologues(node.statements, false);
if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8) {
writeLine();
write("var __extends = this.__extends || function (d, b) {");
increaseIndent();
writeLine();
write("for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];");
writeLine();
write("function __() { this.constructor = d; }");
writeLine();
write("__.prototype = b.prototype;");
writeLine();
write("d.prototype = new __();");
decreaseIndent();
writeLine();
write("};");
extendsEmitted = true;
}
if (ts.isExternalModule(node)) {
if (compilerOptions.module === 2) {
emitAMDModule(node, startIndex);
}
else {
emitCommonJSModule(node, startIndex);
}
}
else {
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
emitTempDeclarations(true);
}
emitLeadingComments(node.endOfFileToken);
}
function emitNode(node, disableComments) {
if (!node) {
return;
}
if (node.flags & 2) {
return emitPinnedOrTripleSlashComments(node);
}
var emitComments = !disableComments && shouldEmitLeadingAndTrailingComments(node);
if (emitComments) {
emitLeadingComments(node);
}
emitJavaScriptWorker(node);
if (emitComments) {
emitTrailingComments(node);
}
}
function shouldEmitLeadingAndTrailingComments(node) {
switch (node.kind) {
case 195:
case 193:
case 200:
case 196:
case 201:
return false;
case 198:
return shouldEmitModuleDeclaration(node);
case 197:
return shouldEmitEnumDeclaration(node);
}
return true;
}
function emitJavaScriptWorker(node) {
switch (node.kind) {
case 64:
return emitIdentifier(node);
case 126:
return emitParameter(node);
case 130:
case 129:
return emitMethod(node);
case 132:
case 133:
return emitAccessor(node);
case 92:
return emitThis(node);
case 90:
return emitSuper(node);
case 88:
return write("null");
case 94:
return write("true");
case 79:
return write("false");
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
return emitLiteral(node);
case 167:
return emitTemplateExpression(node);
case 171:
return emitTemplateSpan(node);
case 123:
return emitQualifiedName(node);
case 146:
return emitObjectBindingPattern(node);
case 147:
return emitArrayBindingPattern(node);
case 148:
return emitBindingElement(node);
case 149:
return emitArrayLiteral(node);
case 150:
return emitObjectLiteral(node);
case 207:
return emitPropertyAssignment(node);
case 208:
return emitShorthandPropertyAssignment(node);
case 124:
return emitComputedPropertyName(node);
case 151:
return emitPropertyAccess(node);
case 152:
return emitIndexedAccess(node);
case 153:
return emitCallExpression(node);
case 154:
return emitNewExpression(node);
case 155:
return emitTaggedTemplateExpression(node);
case 156:
return emit(node.expression);
case 157:
return emitParenExpression(node);
case 193:
case 158:
case 159:
return emitFunctionDeclaration(node);
case 160:
return emitDeleteExpression(node);
case 161:
return emitTypeOfExpression(node);
case 162:
return emitVoidExpression(node);
case 163:
return emitPrefixUnaryExpression(node);
case 164:
return emitPostfixUnaryExpression(node);
case 165:
return emitBinaryExpression(node);
case 166:
return emitConditionalExpression(node);
case 169:
return emitSpreadElementExpression(node);
case 170:
return;
case 172:
case 199:
return emitBlock(node);
case 173:
return emitVariableStatement(node);
case 174:
return write(";");
case 175:
return emitExpressionStatement(node);
case 176:
return emitIfStatement(node);
case 177:
return emitDoStatement(node);
case 178:
return emitWhileStatement(node);
case 179:
return emitForStatement(node);
case 181:
case 180:
return emitForInOrForOfStatement(node);
case 182:
case 183:
return emitBreakOrContinueStatement(node);
case 184:
return emitReturnStatement(node);
case 185:
return emitWithStatement(node);
case 186:
return emitSwitchStatement(node);
case 203:
case 204:
return emitCaseOrDefaultClause(node);
case 187:
return emitLabelledStatement(node);
case 188:
return emitThrowStatement(node);
case 189:
return emitTryStatement(node);
case 206:
return emitCatchClause(node);
case 190:
return emitDebuggerStatement(node);
case 191:
return emitVariableDeclaration(node);
case 194:
return emitClassDeclaration(node);
case 195:
return emitInterfaceDeclaration(node);
case 197:
return emitEnumDeclaration(node);
case 209:
return emitEnumMember(node);
case 198:
return emitModuleDeclaration(node);
case 200:
return emitImportDeclaration(node);
case 210:
return emitSourceFile(node);
}
}
function hasDetachedComments(pos) {
return detachedCommentsInfo !== undefined && detachedCommentsInfo[detachedCommentsInfo.length - 1].nodePos === pos;
}
function getLeadingCommentsWithoutDetachedComments() {
var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, detachedCommentsInfo[detachedCommentsInfo.length - 1].detachedCommentEndPos);
if (detachedCommentsInfo.length - 1) {
detachedCommentsInfo.pop();
}
else {
detachedCommentsInfo = undefined;
}
return leadingComments;
}
function getLeadingCommentsToEmit(node) {
if (node.parent) {
if (node.parent.kind === 210 || node.pos !== node.parent.pos) {
var leadingComments;
if (hasDetachedComments(node.pos)) {
leadingComments = getLeadingCommentsWithoutDetachedComments();
}
else {
leadingComments = ts.getLeadingCommentRangesOfNode(node, currentSourceFile);
}
return leadingComments;
}
}
}
function emitLeadingDeclarationComments(node) {
var leadingComments = getLeadingCommentsToEmit(node);
emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
}
function emitTrailingDeclarationComments(node) {
if (node.parent) {
if (node.parent.kind === 210 || node.end !== node.parent.end) {
var trailingComments = ts.getTrailingCommentRanges(currentSourceFile.text, node.end);
emitComments(currentSourceFile, writer, trailingComments, false, newLine, writeComment);
}
}
}
function emitLeadingCommentsOfLocalPosition(pos) {
var leadingComments;
if (hasDetachedComments(pos)) {
leadingComments = getLeadingCommentsWithoutDetachedComments();
}
else {
leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, pos);
}
emitNewLineBeforeLeadingComments(currentSourceFile, writer, { pos: pos, end: pos }, leadingComments);
emitComments(currentSourceFile, writer, leadingComments, true, newLine, writeComment);
}
function emitDetachedCommentsAtPosition(node) {
var leadingComments = ts.getLeadingCommentRanges(currentSourceFile.text, node.pos);
if (leadingComments) {
var detachedComments = [];
var lastComment;
ts.forEach(leadingComments, function (comment) {
if (lastComment) {
var lastCommentLine = getLineOfLocalPosition(currentSourceFile, lastComment.end);
var commentLine = getLineOfLocalPosition(currentSourceFile, comment.pos);
if (commentLine >= lastCommentLine + 2) {
return detachedComments;
}
}
detachedComments.push(comment);
lastComment = comment;
});
if (detachedComments.length) {
var lastCommentLine = getLineOfLocalPosition(currentSourceFile, detachedComments[detachedComments.length - 1].end);
var nodeLine = getLineOfLocalPosition(currentSourceFile, ts.skipTrivia(currentSourceFile.text, node.pos));
if (nodeLine >= lastCommentLine + 2) {
emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, leadingComments);
emitComments(currentSourceFile, writer, detachedComments, true, newLine, writeComment);
var currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: detachedComments[detachedComments.length - 1].end };
if (detachedCommentsInfo) {
detachedCommentsInfo.push(currentDetachedCommentInfo);
}
else {
detachedCommentsInfo = [currentDetachedCommentInfo];
}
}
}
}
}
function emitPinnedOrTripleSlashCommentsOfNode(node) {
var pinnedComments = ts.filter(getLeadingCommentsToEmit(node), isPinnedOrTripleSlashComment);
function isPinnedOrTripleSlashComment(comment) {
if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 42) {
return currentSourceFile.text.charCodeAt(comment.pos + 2) === 33;
}
else if (currentSourceFile.text.charCodeAt(comment.pos + 1) === 47 &&
comment.pos + 2 < comment.end &&
currentSourceFile.text.charCodeAt(comment.pos + 2) === 47 &&
currentSourceFile.text.substring(comment.pos, comment.end).match(ts.fullTripleSlashReferencePathRegEx)) {
return true;
}
}
emitNewLineBeforeLeadingComments(currentSourceFile, writer, node, pinnedComments);
emitComments(currentSourceFile, writer, pinnedComments, true, newLine, writeComment);
}
}
function writeDeclarationFile(jsFilePath, sourceFile) {
var emitDeclarationResult = emitDeclarations(host, resolver, diagnostics, jsFilePath, sourceFile);
if (!emitDeclarationResult.reportedDeclarationError) {
var declarationOutput = emitDeclarationResult.referencePathsOutput;
var appliedSyncOutputPos = 0;
ts.forEach(emitDeclarationResult.aliasDeclarationEmitInfo, function (aliasEmitInfo) {
if (aliasEmitInfo.asynchronousOutput) {
declarationOutput += emitDeclarationResult.synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos);
declarationOutput += aliasEmitInfo.asynchronousOutput;
appliedSyncOutputPos = aliasEmitInfo.outputPos;
}
});
declarationOutput += emitDeclarationResult.synchronousDeclarationOutput.substring(appliedSyncOutputPos);
writeFile(host, diagnostics, ts.removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM);
}
}
function emitFile(jsFilePath, sourceFile) {
emitJavaScript(jsFilePath, sourceFile);
if (compilerOptions.declaration) {
writeDeclarationFile(jsFilePath, sourceFile);
}
}
}
ts.emitFiles = emitFiles;
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.emitTime = 0;
function createCompilerHost(options) {
var currentDirectory;
var existingDirectories = {};
function getCanonicalFileName(fileName) {
return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
}
var unsupportedFileEncodingErrorCode = -2147024809;
function getSourceFile(fileName, languageVersion, onError) {
try {
var text = ts.sys.readFile(fileName, options.charset);
}
catch (e) {
if (onError) {
onError(e.number === unsupportedFileEncodingErrorCode ? ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_file_encoding).messageText : e.message);
}
text = "";
}
return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined;
}
function writeFile(fileName, data, writeByteOrderMark, onError) {
function directoryExists(directoryPath) {
if (ts.hasProperty(existingDirectories, directoryPath)) {
return true;
}
if (ts.sys.directoryExists(directoryPath)) {
existingDirectories[directoryPath] = true;
return true;
}
return false;
}
function ensureDirectoriesExist(directoryPath) {
if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) {
var parentDirectory = ts.getDirectoryPath(directoryPath);
ensureDirectoriesExist(parentDirectory);
ts.sys.createDirectory(directoryPath);
}
}
try {
ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName)));
ts.sys.writeFile(fileName, data, writeByteOrderMark);
}
catch (e) {
if (onError) {
onError(e.message);
}
}
}
return {
getSourceFile: getSourceFile,
getDefaultLibFileName: function (options) { return ts.combinePaths(ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath())), ts.getDefaultLibFileName(options)); },
writeFile: writeFile,
getCurrentDirectory: function () { return currentDirectory || (currentDirectory = ts.sys.getCurrentDirectory()); },
useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
getCanonicalFileName: getCanonicalFileName,
getNewLine: function () { return ts.sys.newLine; }
};
}
ts.createCompilerHost = createCompilerHost;
function getPreEmitDiagnostics(program) {
var diagnostics = program.getSyntacticDiagnostics().concat(program.getGlobalDiagnostics()).concat(program.getSemanticDiagnostics());
return ts.sortAndDeduplicateDiagnostics(diagnostics);
}
ts.getPreEmitDiagnostics = getPreEmitDiagnostics;
function flattenDiagnosticMessageText(messageText, newLine) {
if (typeof messageText === "string") {
return messageText;
}
else {
var diagnosticChain = messageText;
var result = "";
var indent = 0;
while (diagnosticChain) {
if (indent) {
result += newLine;
for (var i = 0; i < indent; i++) {
result += " ";
}
}
result += diagnosticChain.messageText;
indent++;
diagnosticChain = diagnosticChain.next;
}
return result;
}
}
ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText;
function createProgram(rootNames, options, host) {
var program;
var files = [];
var filesByName = {};
var diagnostics = ts.createDiagnosticCollection();
var seenNoDefaultLib = options.noLib;
var commonSourceDirectory;
host = host || createCompilerHost(options);
ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
if (!seenNoDefaultLib) {
processRootFile(host.getDefaultLibFileName(options), true);
}
verifyCompilerOptions();
var diagnosticsProducingTypeChecker;
var noDiagnosticsTypeChecker;
program = {
getSourceFile: getSourceFile,
getSourceFiles: function () { return files; },
getCompilerOptions: function () { return options; },
getSyntacticDiagnostics: getSyntacticDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getSemanticDiagnostics: getSemanticDiagnostics,
getDeclarationDiagnostics: getDeclarationDiagnostics,
getTypeChecker: getTypeChecker,
getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker,
getCommonSourceDirectory: function () { return commonSourceDirectory; },
emit: emit,
getCurrentDirectory: host.getCurrentDirectory,
getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); },
getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); },
getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); },
getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }
};
return program;
function getEmitHost(writeFileCallback) {
return {
getCanonicalFileName: host.getCanonicalFileName,
getCommonSourceDirectory: program.getCommonSourceDirectory,
getCompilerOptions: program.getCompilerOptions,
getCurrentDirectory: host.getCurrentDirectory,
getNewLine: host.getNewLine,
getSourceFile: program.getSourceFile,
getSourceFiles: program.getSourceFiles,
writeFile: writeFileCallback || host.writeFile
};
}
function getDiagnosticsProducingTypeChecker() {
return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true));
}
function getTypeChecker() {
return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false));
}
function getDeclarationDiagnostics(targetSourceFile) {
var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(targetSourceFile);
return ts.getDeclarationDiagnostics(getEmitHost(), resolver, targetSourceFile);
}
function emit(sourceFile, writeFileCallback) {
if (options.noEmitOnError && getPreEmitDiagnostics(this).length > 0) {
return { diagnostics: [], sourceMaps: undefined, emitSkipped: true };
}
var start = new Date().getTime();
var emitResult = ts.emitFiles(getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile), getEmitHost(writeFileCallback), sourceFile);
ts.emitTime += new Date().getTime() - start;
return emitResult;
}
function getSourceFile(fileName) {
fileName = host.getCanonicalFileName(fileName);
return ts.hasProperty(filesByName, fileName) ? filesByName[fileName] : undefined;
}
function getDiagnosticsHelper(sourceFile, getDiagnostics) {
if (sourceFile) {
return getDiagnostics(sourceFile);
}
var allDiagnostics = [];
ts.forEach(program.getSourceFiles(), function (sourceFile) {
ts.addRange(allDiagnostics, getDiagnostics(sourceFile));
});
return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
}
function getSyntacticDiagnostics(sourceFile) {
return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile);
}
function getSemanticDiagnostics(sourceFile) {
return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile);
}
function getSyntacticDiagnosticsForFile(sourceFile) {
return sourceFile.parseDiagnostics;
}
function getSemanticDiagnosticsForFile(sourceFile) {
var typeChecker = getDiagnosticsProducingTypeChecker();
ts.Debug.assert(!!sourceFile.bindDiagnostics);
var bindDiagnostics = sourceFile.bindDiagnostics;
var checkDiagnostics = typeChecker.getDiagnostics(sourceFile);
var programDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName);
return bindDiagnostics.concat(checkDiagnostics).concat(programDiagnostics);
}
function getGlobalDiagnostics() {
var typeChecker = getDiagnosticsProducingTypeChecker();
var allDiagnostics = [];
ts.addRange(allDiagnostics, typeChecker.getGlobalDiagnostics());
ts.addRange(allDiagnostics, diagnostics.getGlobalDiagnostics());
return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
}
function hasExtension(fileName) {
return ts.getBaseFileName(fileName).indexOf(".") >= 0;
}
function processRootFile(fileName, isDefaultLib) {
processSourceFile(ts.normalizePath(fileName), isDefaultLib);
}
function processSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd) {
if (refEnd !== undefined && refPos !== undefined) {
var start = refPos;
var length = refEnd - refPos;
}
var diagnostic;
if (hasExtension(fileName)) {
if (!options.allowNonTsExtensions && !ts.fileExtensionIs(host.getCanonicalFileName(fileName), ".ts")) {
diagnostic = ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts;
}
else if (!findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
diagnostic = ts.Diagnostics.File_0_not_found;
}
else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) {
diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself;
}
}
else {
if (options.allowNonTsExtensions && !findSourceFile(fileName, isDefaultLib, refFile, refPos, refEnd)) {
diagnostic = ts.Diagnostics.File_0_not_found;
}
else if (!findSourceFile(fileName + ".ts", isDefaultLib, refFile, refPos, refEnd) && !findSourceFile(fileName + ".d.ts", isDefaultLib, refFile, refPos, refEnd)) {
diagnostic = ts.Diagnostics.File_0_not_found;
fileName += ".ts";
}
}
if (diagnostic) {
if (refFile) {
diagnostics.add(ts.createFileDiagnostic(refFile, start, length, diagnostic, fileName));
}
else {
diagnostics.add(ts.createCompilerDiagnostic(diagnostic, fileName));
}
}
}
function findSourceFile(fileName, isDefaultLib, refFile, refStart, refLength) {
var canonicalName = host.getCanonicalFileName(fileName);
if (ts.hasProperty(filesByName, canonicalName)) {
return getSourceFileFromCache(fileName, canonicalName, false);
}
else {
var normalizedAbsolutePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory());
var canonicalAbsolutePath = host.getCanonicalFileName(normalizedAbsolutePath);
if (ts.hasProperty(filesByName, canonicalAbsolutePath)) {
return getSourceFileFromCache(normalizedAbsolutePath, canonicalAbsolutePath, true);
}
var file = filesByName[canonicalName] = host.getSourceFile(fileName, options.target, function (hostErrorMessage) {
if (refFile) {
diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
}
else {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
}
});
if (file) {
seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib;
filesByName[canonicalAbsolutePath] = file;
if (!options.noResolve) {
var basePath = ts.getDirectoryPath(fileName);
processReferencedFiles(file, basePath);
processImportedModules(file, basePath);
}
if (isDefaultLib) {
files.unshift(file);
}
else {
files.push(file);
}
}
}
return file;
function getSourceFileFromCache(fileName, canonicalName, useAbsolutePath) {
var file = filesByName[canonicalName];
if (file && host.useCaseSensitiveFileNames()) {
var sourceFileName = useAbsolutePath ? ts.getNormalizedAbsolutePath(file.fileName, host.getCurrentDirectory()) : file.fileName;
if (canonicalName !== sourceFileName) {
diagnostics.add(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, sourceFileName));
}
}
return file;
}
}
function processReferencedFiles(file, basePath) {
ts.forEach(file.referencedFiles, function (ref) {
var referencedFileName = ts.isRootedDiskPath(ref.fileName) ? ref.fileName : ts.combinePaths(basePath, ref.fileName);
processSourceFile(ts.normalizePath(referencedFileName), false, file, ref.pos, ref.end);
});
}
function processImportedModules(file, basePath) {
ts.forEach(file.statements, function (node) {
if (ts.isExternalModuleImportDeclaration(node) &&
ts.getExternalModuleImportDeclarationExpression(node).kind === 8) {
var nameLiteral = ts.getExternalModuleImportDeclarationExpression(node);
var moduleName = nameLiteral.text;
if (moduleName) {
var searchPath = basePath;
while (true) {
var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName));
if (findModuleSourceFile(searchName + ".ts", nameLiteral) || findModuleSourceFile(searchName + ".d.ts", nameLiteral)) {
break;
}
var parentPath = ts.getDirectoryPath(searchPath);
if (parentPath === searchPath) {
break;
}
searchPath = parentPath;
}
}
}
else if (node.kind === 198 && node.name.kind === 8 && (node.flags & 2 || ts.isDeclarationFile(file))) {
ts.forEachChild(node.body, function (node) {
if (ts.isExternalModuleImportDeclaration(node) &&
ts.getExternalModuleImportDeclarationExpression(node).kind === 8) {
var nameLiteral = ts.getExternalModuleImportDeclarationExpression(node);
var moduleName = nameLiteral.text;
if (moduleName) {
var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName));
var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral);
if (!tsFile) {
findModuleSourceFile(searchName + ".d.ts", nameLiteral);
}
}
}
});
}
});
function findModuleSourceFile(fileName, nameLiteral) {
return findSourceFile(fileName, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos);
}
}
function verifyCompilerOptions() {
if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) {
if (options.mapRoot) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option));
}
if (options.sourceRoot) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option));
}
return;
}
var firstExternalModule = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; });
if (firstExternalModule && !options.module) {
var externalModuleErrorSpan = ts.getErrorSpanForNode(firstExternalModule.externalModuleIndicator);
var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos);
var errorLength = externalModuleErrorSpan.end - errorStart;
diagnostics.add(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided));
}
if (options.outDir ||
options.sourceRoot ||
(options.mapRoot &&
(!options.out || firstExternalModule !== undefined))) {
var commonPathComponents;
ts.forEach(files, function (sourceFile) {
if (!(sourceFile.flags & 1024) && !ts.fileExtensionIs(sourceFile.fileName, ".js")) {
var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile.fileName, host.getCurrentDirectory());
sourcePathComponents.pop();
if (commonPathComponents) {
for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathComponents.length); i++) {
if (commonPathComponents[i] !== sourcePathComponents[i]) {
if (i === 0) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files));
return;
}
commonPathComponents.length = i;
break;
}
}
if (sourcePathComponents.length < commonPathComponents.length) {
commonPathComponents.length = sourcePathComponents.length;
}
}
else {
commonPathComponents = sourcePathComponents;
}
}
});
commonSourceDirectory = ts.getNormalizedPathFromPathComponents(commonPathComponents);
if (commonSourceDirectory) {
commonSourceDirectory += ts.directorySeparator;
}
}
if (options.noEmit) {
if (options.out || options.outDir) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_out_or_outDir));
}
if (options.declaration) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_noEmit_cannot_be_specified_with_option_declaration));
}
}
}
}
ts.createProgram = createProgram;
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.optionDeclarations = [
{
name: "charset",
type: "string"
},
{
name: "codepage",
type: "number"
},
{
name: "declaration",
shortName: "d",
type: "boolean",
description: ts.Diagnostics.Generates_corresponding_d_ts_file
},
{
name: "diagnostics",
type: "boolean"
},
{
name: "emitBOM",
type: "boolean"
},
{
name: "help",
shortName: "h",
type: "boolean",
description: ts.Diagnostics.Print_this_message
},
{
name: "listFiles",
type: "boolean"
},
{
name: "locale",
type: "string"
},
{
name: "mapRoot",
type: "string",
isFilePath: true,
description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
paramType: ts.Diagnostics.LOCATION
},
{
name: "module",
shortName: "m",
type: {
"commonjs": 1,
"amd": 2
},
description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_or_amd,
paramType: ts.Diagnostics.KIND,
error: ts.Diagnostics.Argument_for_module_option_must_be_commonjs_or_amd
},
{
name: "noEmit",
type: "boolean",
description: ts.Diagnostics.Do_not_emit_outputs
},
{
name: "noEmitOnError",
type: "boolean",
description: ts.Diagnostics.Do_not_emit_outputs_if_any_type_checking_errors_were_reported
},
{
name: "noImplicitAny",
type: "boolean",
description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
},
{
name: "noLib",
type: "boolean"
},
{
name: "noLibCheck",
type: "boolean"
},
{
name: "noResolve",
type: "boolean"
},
{
name: "out",
type: "string",
description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
paramType: ts.Diagnostics.FILE
},
{
name: "outDir",
type: "string",
isFilePath: true,
description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
paramType: ts.Diagnostics.DIRECTORY
},
{
name: "preserveConstEnums",
type: "boolean",
description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
},
{
name: "project",
shortName: "p",
type: "string",
isFilePath: true,
description: ts.Diagnostics.Compile_the_project_in_the_given_directory,
paramType: ts.Diagnostics.DIRECTORY
},
{
name: "removeComments",
type: "boolean",
description: ts.Diagnostics.Do_not_emit_comments_to_output
},
{
name: "sourceMap",
type: "boolean",
description: ts.Diagnostics.Generates_corresponding_map_file
},
{
name: "sourceRoot",
type: "string",
isFilePath: true,
description: ts.Diagnostics.Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
paramType: ts.Diagnostics.LOCATION
},
{
name: "suppressImplicitAnyIndexErrors",
type: "boolean",
description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures
},
{
name: "stripInternal",
type: "boolean",
description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
experimental: true
},
{
name: "target",
shortName: "t",
type: { "es3": 0, "es5": 1, "es6": 2 },
description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES6_experimental,
paramType: ts.Diagnostics.VERSION,
error: ts.Diagnostics.Argument_for_target_option_must_be_es3_es5_or_es6
},
{
name: "version",
shortName: "v",
type: "boolean",
description: ts.Diagnostics.Print_the_compiler_s_version
},
{
name: "watch",
shortName: "w",
type: "boolean",
description: ts.Diagnostics.Watch_input_files
}
];
function parseCommandLine(commandLine) {
var options = {};
var fileNames = [];
var errors = [];
var shortOptionNames = {};
var optionNameMap = {};
ts.forEach(ts.optionDeclarations, function (option) {
optionNameMap[option.name.toLowerCase()] = option;
if (option.shortName) {
shortOptionNames[option.shortName] = option.name;
}
});
parseStrings(commandLine);
return {
options: options,
fileNames: fileNames,
errors: errors
};
function parseStrings(args) {
var i = 0;
while (i < args.length) {
var s = args[i++];
if (s.charCodeAt(0) === 64) {
parseResponseFile(s.slice(1));
}
else if (s.charCodeAt(0) === 45) {
s = s.slice(s.charCodeAt(1) === 45 ? 2 : 1).toLowerCase();
if (ts.hasProperty(shortOptionNames, s)) {
s = shortOptionNames[s];
}
if (ts.hasProperty(optionNameMap, s)) {
var opt = optionNameMap[s];
if (!args[i] && opt.type !== "boolean") {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name));
}
switch (opt.type) {
case "number":
options[opt.name] = parseInt(args[i++]);
break;
case "boolean":
options[opt.name] = true;
break;
case "string":
options[opt.name] = args[i++] || "";
break;
default:
var map = opt.type;
var key = (args[i++] || "").toLowerCase();
if (ts.hasProperty(map, key)) {
options[opt.name] = map[key];
}
else {
errors.push(ts.createCompilerDiagnostic(opt.error));
}
}
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, s));
}
}
else {
fileNames.push(s);
}
}
}
function parseResponseFile(fileName) {
var text = ts.sys.readFile(fileName);
if (!text) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName));
return;
}
var args = [];
var pos = 0;
while (true) {
while (pos < text.length && text.charCodeAt(pos) <= 32)
pos++;
if (pos >= text.length)
break;
var start = pos;
if (text.charCodeAt(start) === 34) {
pos++;
while (pos < text.length && text.charCodeAt(pos) !== 34)
pos++;
if (pos < text.length) {
args.push(text.substring(start + 1, pos));
pos++;
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName));
}
}
else {
while (text.charCodeAt(pos) > 32)
pos++;
args.push(text.substring(start, pos));
}
}
parseStrings(args);
}
}
ts.parseCommandLine = parseCommandLine;
function readConfigFile(fileName) {
try {
var text = ts.sys.readFile(fileName);
return /\S/.test(text) ? JSON.parse(text) : {};
}
catch (e) {
}
}
ts.readConfigFile = readConfigFile;
function parseConfigFile(json, basePath) {
var errors = [];
return {
options: getCompilerOptions(),
fileNames: getFiles(),
errors: errors
};
function getCompilerOptions() {
var options = {};
var optionNameMap = {};
ts.forEach(ts.optionDeclarations, function (option) {
optionNameMap[option.name] = option;
});
var jsonOptions = json["compilerOptions"];
if (jsonOptions) {
for (var id in jsonOptions) {
if (ts.hasProperty(optionNameMap, id)) {
var opt = optionNameMap[id];
var optType = opt.type;
var value = jsonOptions[id];
var expectedType = typeof optType === "string" ? optType : "string";
if (typeof value === expectedType) {
if (typeof optType !== "string") {
var key = value.toLowerCase();
if (ts.hasProperty(optType, key)) {
value = optType[key];
}
else {
errors.push(ts.createCompilerDiagnostic(opt.error));
value = 0;
}
}
if (opt.isFilePath) {
value = ts.normalizePath(ts.combinePaths(basePath, value));
}
options[opt.name] = value;
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, id, expectedType));
}
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, id));
}
}
}
return options;
}
function getFiles() {
var files = [];
if (ts.hasProperty(json, "files")) {
if (json["files"] instanceof Array) {
var files = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); });
}
}
else {
var sysFiles = ts.sys.readDirectory(basePath, ".ts");
for (var i = 0; i < sysFiles.length; i++) {
var name = sysFiles[i];
if (!ts.fileExtensionIs(name, ".d.ts") || !ts.contains(sysFiles, name.substr(0, name.length - 5) + ".ts")) {
files.push(name);
}
}
}
return files;
}
}
ts.parseConfigFile = parseConfigFile;
})(ts || (ts = {}));
var ts;
(function (ts) {
var OutliningElementsCollector;
(function (OutliningElementsCollector) {
function collectElements(sourceFile) {
var elements = [];
var collapseText = "...";
function addOutliningSpan(hintSpanNode, startElement, endElement, autoCollapse) {
if (hintSpanNode && startElement && endElement) {
var span = {
textSpan: ts.createTextSpanFromBounds(startElement.pos, endElement.end),
hintSpan: ts.createTextSpanFromBounds(hintSpanNode.getStart(), hintSpanNode.end),
bannerText: collapseText,
autoCollapse: autoCollapse
};
elements.push(span);
}
}
function autoCollapse(node) {
switch (node.kind) {
case 199:
case 194:
case 195:
case 197:
return false;
}
return true;
}
var depth = 0;
var maxDepth = 20;
function walk(n) {
if (depth > maxDepth) {
return;
}
switch (n.kind) {
case 172:
if (!ts.isFunctionBlock(n)) {
var parent = n.parent;
var openBrace = ts.findChildOfKind(n, 14, sourceFile);
var closeBrace = ts.findChildOfKind(n, 15, sourceFile);
if (parent.kind === 177 ||
parent.kind === 180 ||
parent.kind === 181 ||
parent.kind === 179 ||
parent.kind === 176 ||
parent.kind === 178 ||
parent.kind === 185 ||
parent.kind === 206) {
addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n));
break;
}
if (parent.kind === 189) {
var tryStatement = parent;
if (tryStatement.tryBlock === n) {
addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n));
break;
}
else if (tryStatement.finallyBlock === n) {
var finallyKeyword = ts.findChildOfKind(tryStatement, 80, sourceFile);
if (finallyKeyword) {
addOutliningSpan(finallyKeyword, openBrace, closeBrace, autoCollapse(n));
break;
}
}
}
var span = ts.createTextSpanFromBounds(n.getStart(), n.end);
elements.push({
textSpan: span,
hintSpan: span,
bannerText: collapseText,
autoCollapse: autoCollapse(n)
});
break;
}
case 199:
var openBrace = ts.findChildOfKind(n, 14, sourceFile);
var closeBrace = ts.findChildOfKind(n, 15, sourceFile);
addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n));
break;
case 194:
case 195:
case 197:
case 150:
case 186:
var openBrace = ts.findChildOfKind(n, 14, sourceFile);
var closeBrace = ts.findChildOfKind(n, 15, sourceFile);
addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n));
break;
case 149:
var openBracket = ts.findChildOfKind(n, 18, sourceFile);
var closeBracket = ts.findChildOfKind(n, 19, sourceFile);
addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n));
break;
}
depth++;
ts.forEachChild(n, walk);
depth--;
}
walk(sourceFile);
return elements;
}
OutliningElementsCollector.collectElements = collectElements;
})(OutliningElementsCollector = ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var NavigateTo;
(function (NavigateTo) {
var MatchKind;
(function (MatchKind) {
MatchKind[MatchKind["none"] = 0] = "none";
MatchKind[MatchKind["exact"] = 1] = "exact";
MatchKind[MatchKind["substring"] = 2] = "substring";
MatchKind[MatchKind["prefix"] = 3] = "prefix";
})(MatchKind || (MatchKind = {}));
function getNavigateToItems(program, cancellationToken, searchValue, maxResultCount) {
var terms = searchValue.split(" ");
var searchTerms = ts.map(terms, function (t) { return ({ caseSensitive: hasAnyUpperCaseCharacter(t), term: t }); });
var rawItems = [];
ts.forEach(program.getSourceFiles(), function (sourceFile) {
cancellationToken.throwIfCancellationRequested();
var fileName = sourceFile.fileName;
var declarations = sourceFile.getNamedDeclarations();
for (var i = 0, n = declarations.length; i < n; i++) {
var declaration = declarations[i];
var name = declaration.name.text;
var matchKind = getMatchKind(searchTerms, name);
if (matchKind !== 0) {
rawItems.push({ name: name, fileName: fileName, matchKind: matchKind, declaration: declaration });
}
}
});
rawItems.sort(compareNavigateToItems);
if (maxResultCount !== undefined) {
rawItems = rawItems.slice(0, maxResultCount);
}
var items = ts.map(rawItems, createNavigateToItem);
return items;
var baseSensitivity = { sensitivity: "base" };
function compareNavigateToItems(i1, i2) {
return i1.matchKind - i2.matchKind ||
i1.name.localeCompare(i2.name, undefined, baseSensitivity) ||
i1.name.localeCompare(i2.name);
}
function createNavigateToItem(rawItem) {
var declaration = rawItem.declaration;
var container = ts.getContainerNode(declaration);
return {
name: rawItem.name,
kind: ts.getNodeKind(declaration),
kindModifiers: ts.getNodeModifiers(declaration),
matchKind: MatchKind[rawItem.matchKind],
fileName: rawItem.fileName,
textSpan: ts.createTextSpanFromBounds(declaration.getStart(), declaration.getEnd()),
containerName: container && container.name ? container.name.text : "",
containerKind: container && container.name ? ts.getNodeKind(container) : ""
};
}
function hasAnyUpperCaseCharacter(s) {
for (var i = 0, n = s.length; i < n; i++) {
var c = s.charCodeAt(i);
if ((65 <= c && c <= 90) ||
(c >= 127 && s.charAt(i).toLocaleLowerCase() !== s.charAt(i))) {
return true;
}
}
return false;
}
function getMatchKind(searchTerms, name) {
var matchKind = 0;
if (name) {
for (var j = 0, n = searchTerms.length; j < n; j++) {
var searchTerm = searchTerms[j];
var nameToSearch = searchTerm.caseSensitive ? name : name.toLocaleLowerCase();
var index = nameToSearch.indexOf(searchTerm.term);
if (index < 0) {
return 0;
}
var termKind = 2;
if (index === 0) {
termKind = name.length === searchTerm.term.length ? 1 : 3;
}
if (matchKind === 0 || termKind < matchKind) {
matchKind = termKind;
}
}
}
return matchKind;
}
}
NavigateTo.getNavigateToItems = getNavigateToItems;
})(NavigateTo = ts.NavigateTo || (ts.NavigateTo = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var NavigationBar;
(function (NavigationBar) {
function getNavigationBarItems(sourceFile) {
var hasGlobalNode = false;
return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem);
function getIndent(node) {
var indent = hasGlobalNode ? 1 : 0;
var current = node.parent;
while (current) {
switch (current.kind) {
case 198:
do {
current = current.parent;
} while (current.kind === 198);
case 194:
case 197:
case 195:
case 193:
indent++;
}
current = current.parent;
}
return indent;
}
function getChildNodes(nodes) {
var childNodes = [];
function visit(node) {
switch (node.kind) {
case 173:
ts.forEach(node.declarationList.declarations, visit);
break;
case 146:
case 147:
ts.forEach(node.elements, visit);
break;
case 148:
case 191:
if (ts.isBindingPattern(node.name)) {
visit(node.name);
break;
}
case 194:
case 197:
case 195:
case 198:
case 193:
childNodes.push(node);
}
}
ts.forEach(nodes, visit);
return sortNodes(childNodes);
}
function getTopLevelNodes(node) {
var topLevelNodes = [];
topLevelNodes.push(node);
addTopLevelNodes(node.statements, topLevelNodes);
return topLevelNodes;
}
function sortNodes(nodes) {
return nodes.slice(0).sort(function (n1, n2) {
if (n1.name && n2.name) {
return ts.getPropertyNameForPropertyNameNode(n1.name).localeCompare(ts.getPropertyNameForPropertyNameNode(n2.name));
}
else if (n1.name) {
return 1;
}
else if (n2.name) {
return -1;
}
else {
return n1.kind - n2.kind;
}
});
}
function addTopLevelNodes(nodes, topLevelNodes) {
nodes = sortNodes(nodes);
for (var i = 0, n = nodes.length; i < n; i++) {
var node = nodes[i];
switch (node.kind) {
case 194:
case 197:
case 195:
topLevelNodes.push(node);
break;
case 198:
var moduleDeclaration = node;
topLevelNodes.push(node);
addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes);
break;
case 193:
var functionDeclaration = node;
if (isTopLevelFunctionDeclaration(functionDeclaration)) {
topLevelNodes.push(node);
addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes);
}
break;
}
}
}
function isTopLevelFunctionDeclaration(functionDeclaration) {
if (functionDeclaration.kind === 193) {
if (functionDeclaration.body && functionDeclaration.body.kind === 172) {
if (ts.forEach(functionDeclaration.body.statements, function (s) { return s.kind === 193 && !isEmpty(s.name.text); })) {
return true;
}
if (!ts.isFunctionBlock(functionDeclaration.parent)) {
return true;
}
}
}
return false;
}
function getItemsWorker(nodes, createItem) {
var items = [];
var keyToItem = {};
for (var i = 0, n = nodes.length; i < n; i++) {
var child = nodes[i];
var item = createItem(child);
if (item !== undefined) {
if (item.text.length > 0) {
var key = item.text + "-" + item.kind + "-" + item.indent;
var itemWithSameName = keyToItem[key];
if (itemWithSameName) {
merge(itemWithSameName, item);
}
else {
keyToItem[key] = item;
items.push(item);
}
}
}
}
return items;
}
function merge(target, source) {
target.spans.push.apply(target.spans, source.spans);
if (source.childItems) {
if (!target.childItems) {
target.childItems = [];
}
outer: for (var i = 0, n = source.childItems.length; i < n; i++) {
var sourceChild = source.childItems[i];
for (var j = 0, m = target.childItems.length; j < m; j++) {
var targetChild = target.childItems[j];
if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) {
merge(targetChild, sourceChild);
continue outer;
}
}
target.childItems.push(sourceChild);
}
}
}
function createChildItem(node) {
switch (node.kind) {
case 126:
if (ts.isBindingPattern(node.name)) {
break;
}
if ((node.flags & 243) === 0) {
return undefined;
}
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 130:
case 129:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement);
case 132:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement);
case 133:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement);
case 136:
return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement);
case 209:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 134:
return createItem(node, "()", ts.ScriptElementKind.callSignatureElement);
case 135:
return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement);
case 128:
case 127:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement);
case 193:
return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement);
case 191:
case 148:
var variableDeclarationNode;
var name;
if (node.kind === 148) {
name = node.name;
variableDeclarationNode = node;
while (variableDeclarationNode && variableDeclarationNode.kind !== 191) {
variableDeclarationNode = variableDeclarationNode.parent;
}
ts.Debug.assert(variableDeclarationNode !== undefined);
}
else {
ts.Debug.assert(!ts.isBindingPattern(node.name));
variableDeclarationNode = node;
name = node.name;
}
if (ts.isConst(variableDeclarationNode)) {
return createItem(node, getTextOfNode(name), ts.ScriptElementKind.constElement);
}
else if (ts.isLet(variableDeclarationNode)) {
return createItem(node, getTextOfNode(name), ts.ScriptElementKind.letElement);
}
else {
return createItem(node, getTextOfNode(name), ts.ScriptElementKind.variableElement);
}
case 131:
return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement);
}
return undefined;
function createItem(node, name, scriptElementKind) {
return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]);
}
}
function isEmpty(text) {
return !text || text.trim() === "";
}
function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) {
if (childItems === void 0) { childItems = []; }
if (indent === void 0) { indent = 0; }
if (isEmpty(text)) {
return undefined;
}
return {
text: text,
kind: kind,
kindModifiers: kindModifiers,
spans: spans,
childItems: childItems,
indent: indent,
bolded: false,
grayed: false
};
}
function createTopLevelItem(node) {
switch (node.kind) {
case 210:
return createSourceFileItem(node);
case 194:
return createClassItem(node);
case 197:
return createEnumItem(node);
case 195:
return createIterfaceItem(node);
case 198:
return createModuleItem(node);
case 193:
return createFunctionItem(node);
}
return undefined;
function getModuleName(moduleDeclaration) {
if (moduleDeclaration.name.kind === 8) {
return getTextOfNode(moduleDeclaration.name);
}
var result = [];
result.push(moduleDeclaration.name.text);
while (moduleDeclaration.body && moduleDeclaration.body.kind === 198) {
moduleDeclaration = moduleDeclaration.body;
result.push(moduleDeclaration.name.text);
}
return result.join(".");
}
function createModuleItem(node) {
var moduleName = getModuleName(node);
var childItems = getItemsWorker(getChildNodes(getInnermostModule(node).body.statements), createChildItem);
return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createFunctionItem(node) {
if (node.name && node.body && node.body.kind === 172) {
var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
return undefined;
}
function createSourceFileItem(node) {
var childItems = getItemsWorker(getChildNodes(node.statements), createChildItem);
if (childItems === undefined || childItems.length === 0) {
return undefined;
}
hasGlobalNode = true;
var rootName = ts.isExternalModule(node) ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(node.fileName)))) + "\"" : "<global>";
return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)], childItems);
}
function createClassItem(node) {
var childItems;
if (node.members) {
var constructor = ts.forEach(node.members, function (member) {
return member.kind === 131 && member;
});
var nodes = removeDynamicallyNamedProperties(node);
if (constructor) {
nodes.push.apply(nodes, constructor.parameters);
}
var childItems = getItemsWorker(sortNodes(nodes), createChildItem);
}
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.classElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createEnumItem(node) {
var childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.enumElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
function createIterfaceItem(node) {
var childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem);
return getNavigationBarItem(node.name.text, ts.ScriptElementKind.interfaceElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node));
}
}
function removeComputedProperties(node) {
return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 124; });
}
function removeDynamicallyNamedProperties(node) {
return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); });
}
function getInnermostModule(node) {
while (node.body.kind === 198) {
node = node.body;
}
return node;
}
function getNodeSpan(node) {
return node.kind === 210 ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd());
}
function getTextOfNode(node) {
return ts.getTextOfNodeFromSourceText(sourceFile.text, node);
}
}
NavigationBar.getNavigationBarItems = getNavigationBarItems;
})(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
(function (PatternMatchKind) {
PatternMatchKind[PatternMatchKind["Exact"] = 0] = "Exact";
PatternMatchKind[PatternMatchKind["Prefix"] = 1] = "Prefix";
PatternMatchKind[PatternMatchKind["Substring"] = 2] = "Substring";
PatternMatchKind[PatternMatchKind["CamelCase"] = 3] = "CamelCase";
})(ts.PatternMatchKind || (ts.PatternMatchKind = {}));
var PatternMatchKind = ts.PatternMatchKind;
function createPatternMatch(kind, punctuationStripped, isCaseSensitive, camelCaseWeight) {
return {
kind: kind,
punctuationStripped: punctuationStripped,
isCaseSensitive: isCaseSensitive,
camelCaseWeight: camelCaseWeight
};
}
function createPatternMatcher(pattern) {
var stringToWordSpans = {};
pattern = pattern.trim();
var fullPatternSegment = createSegment(pattern);
var dotSeparatedSegments = pattern.split(".").map(function (p) { return createSegment(p.trim()); });
var invalidPattern = dotSeparatedSegments.length === 0 || ts.forEach(dotSeparatedSegments, segmentIsInvalid);
return {
getMatches: getMatches,
getMatchesForLastSegmentOfPattern: getMatchesForLastSegmentOfPattern,
patternContainsDots: dotSeparatedSegments.length > 1
};
function skipMatch(candidate) {
return invalidPattern || !candidate;
}
function getMatchesForLastSegmentOfPattern(candidate) {
if (skipMatch(candidate)) {
return undefined;
}
return matchSegment(candidate, ts.lastOrUndefined(dotSeparatedSegments));
}
function getMatches(candidate, dottedContainer) {
if (skipMatch(candidate)) {
return undefined;
}
var candidateMatch = matchSegment(candidate, ts.lastOrUndefined(dotSeparatedSegments));
if (!candidateMatch) {
return undefined;
}
dottedContainer = dottedContainer || "";
var containerParts = dottedContainer.split(".");
if (dotSeparatedSegments.length - 1 > containerParts.length) {
return null;
}
var totalMatch = candidateMatch;
for (var i = dotSeparatedSegments.length - 2, j = containerParts.length - 1; i >= 0; i--, j--) {
var segment = dotSeparatedSegments[i];
var containerName = containerParts[j];
var containerMatch = matchSegment(containerName, segment);
if (!containerMatch) {
return undefined;
}
ts.addRange(totalMatch, containerMatch);
}
return totalMatch;
}
function getWordSpans(word) {
if (!ts.hasProperty(stringToWordSpans, word)) {
stringToWordSpans[word] = breakIntoWordSpans(word);
}
return stringToWordSpans[word];
}
function matchTextChunk(candidate, chunk, punctuationStripped) {
var index = indexOfIgnoringCase(candidate, chunk.textLowerCase);
if (index === 0) {
if (chunk.text.length === candidate.length) {
return createPatternMatch(0, punctuationStripped, candidate === chunk.text);
}
else {
return createPatternMatch(1, punctuationStripped, startsWith(candidate, chunk.text));
}
}
var isLowercase = chunk.isLowerCase;
if (isLowercase) {
if (index > 0) {
var wordSpans = getWordSpans(candidate);
for (var i = 0, n = wordSpans.length; i < n; i++) {
var span = wordSpans[i];
if (partStartsWith(candidate, span, chunk.text, true)) {
return createPatternMatch(2, punctuationStripped, partStartsWith(candidate, span, chunk.text, false));
}
}
}
}
else {
if (candidate.indexOf(chunk.text) > 0) {
return createPatternMatch(2, punctuationStripped, true);
}
}
if (!isLowercase) {
if (chunk.characterSpans.length > 0) {
var candidateParts = getWordSpans(candidate);
var camelCaseWeight = tryCamelCaseMatch(candidate, candidateParts, chunk, false);
if (camelCaseWeight !== undefined) {
return createPatternMatch(3, punctuationStripped, true, camelCaseWeight);
}
camelCaseWeight = tryCamelCaseMatch(candidate, candidateParts, chunk, true);
if (camelCaseWeight !== undefined) {
return createPatternMatch(3, punctuationStripped, false, camelCaseWeight);
}
}
}
if (isLowercase) {
if (chunk.text.length < candidate.length) {
if (index > 0 && isUpperCaseLetter(candidate.charCodeAt(index))) {
return createPatternMatch(2, punctuationStripped, false);
}
}
}
return undefined;
}
function containsSpaceOrAsterisk(text) {
for (var i = 0; i < text.length; i++) {
var ch = text.charCodeAt(i);
if (ch === 32 || ch === 42) {
return true;
}
}
return false;
}
function matchSegment(candidate, segment) {
if (!containsSpaceOrAsterisk(segment.totalTextChunk.text)) {
var match = matchTextChunk(candidate, segment.totalTextChunk, false);
if (match) {
return [match];
}
}
var subWordTextChunks = segment.subWordTextChunks;
var matches = undefined;
for (var i = 0, n = subWordTextChunks.length; i < n; i++) {
var subWordTextChunk = subWordTextChunks[i];
var result = matchTextChunk(candidate, subWordTextChunk, true);
if (!result) {
return undefined;
}
matches = matches || [];
matches.push(result);
}
return matches;
}
function partStartsWith(candidate, candidateSpan, pattern, ignoreCase, patternSpan) {
var patternPartStart = patternSpan ? patternSpan.start : 0;
var patternPartLength = patternSpan ? patternSpan.length : pattern.length;
if (patternPartLength > candidateSpan.length) {
return false;
}
if (ignoreCase) {
for (var i = 0; i < patternPartLength; i++) {
var ch1 = pattern.charCodeAt(patternPartStart + i);
var ch2 = candidate.charCodeAt(candidateSpan.start + i);
if (toLowerCase(ch1) !== toLowerCase(ch2)) {
return false;
}
}
}
else {
for (var i = 0; i < patternPartLength; i++) {
var ch1 = pattern.charCodeAt(patternPartStart + i);
var ch2 = candidate.charCodeAt(candidateSpan.start + i);
if (ch1 !== ch2) {
return false;
}
}
}
return true;
}
function tryCamelCaseMatch(candidate, candidateParts, chunk, ignoreCase) {
var chunkCharacterSpans = chunk.characterSpans;
var currentCandidate = 0;
var currentChunkSpan = 0;
var firstMatch = undefined;
var contiguous = undefined;
while (true) {
if (currentChunkSpan === chunkCharacterSpans.length) {
var weight = 0;
if (contiguous) {
weight += 1;
}
if (firstMatch === 0) {
weight += 2;
}
return weight;
}
else if (currentCandidate === candidateParts.length) {
return undefined;
}
var candidatePart = candidateParts[currentCandidate];
var gotOneMatchThisCandidate = false;
for (; currentChunkSpan < chunkCharacterSpans.length; currentChunkSpan++) {
var chunkCharacterSpan = chunkCharacterSpans[currentChunkSpan];
if (gotOneMatchThisCandidate) {
if (!isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan - 1].start)) ||
!isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan].start))) {
break;
}
}
if (!partStartsWith(candidate, candidatePart, chunk.text, ignoreCase, chunkCharacterSpan)) {
break;
}
gotOneMatchThisCandidate = true;
firstMatch = firstMatch === undefined ? currentCandidate : firstMatch;
contiguous = contiguous === undefined ? true : contiguous;
candidatePart = ts.createTextSpan(candidatePart.start + chunkCharacterSpan.length, candidatePart.length - chunkCharacterSpan.length);
}
if (!gotOneMatchThisCandidate && contiguous !== undefined) {
contiguous = false;
}
currentCandidate++;
}
}
}
ts.createPatternMatcher = createPatternMatcher;
function patternMatchCompareTo(match1, match2) {
return compareType(match1, match2) ||
compareCamelCase(match1, match2) ||
compareCase(match1, match2) ||
comparePunctuation(match1, match2);
}
function comparePunctuation(result1, result2) {
if (result1.punctuationStripped !== result2.punctuationStripped) {
return result1.punctuationStripped ? 1 : -1;
}
return 0;
}
function compareCase(result1, result2) {
if (result1.isCaseSensitive !== result2.isCaseSensitive) {
return result1.isCaseSensitive ? -1 : 1;
}
return 0;
}
function compareType(result1, result2) {
return result1.kind - result2.kind;
}
function compareCamelCase(result1, result2) {
if (result1.kind === 3 && result2.kind === 3) {
return result2.camelCaseWeight - result1.camelCaseWeight;
}
return 0;
}
function createSegment(text) {
return {
totalTextChunk: createTextChunk(text),
subWordTextChunks: breakPatternIntoTextChunks(text)
};
}
function segmentIsInvalid(segment) {
return segment.subWordTextChunks.length === 0;
}
function isUpperCaseLetter(ch) {
if (ch >= 65 && ch <= 90) {
return true;
}
if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 2)) {
return false;
}
var str = String.fromCharCode(ch);
return str === str.toUpperCase();
}
function isLowerCaseLetter(ch) {
if (ch >= 97 && ch <= 122) {
return true;
}
if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 2)) {
return false;
}
var str = String.fromCharCode(ch);
return str === str.toLowerCase();
}
function containsUpperCaseLetter(string) {
for (var i = 0, n = string.length; i < n; i++) {
if (isUpperCaseLetter(string.charCodeAt(i))) {
return true;
}
}
return false;
}
function startsWith(string, search) {
for (var i = 0, n = search.length; i < n; i++) {
if (string.charCodeAt(i) !== search.charCodeAt(i)) {
return false;
}
}
return true;
}
function indexOfIgnoringCase(string, value) {
for (var i = 0, n = string.length - value.length; i <= n; i++) {
if (startsWithIgnoringCase(string, value, i)) {
return i;
}
}
return -1;
}
function startsWithIgnoringCase(string, value, start) {
for (var i = 0, n = value.length; i < n; i++) {
var ch1 = toLowerCase(string.charCodeAt(i + start));
var ch2 = value.charCodeAt(i);
if (ch1 !== ch2) {
return false;
}
}
return true;
}
function toLowerCase(ch) {
if (ch >= 65 && ch <= 90) {
return 97 + (ch - 65);
}
if (ch < 127) {
return ch;
}
return String.fromCharCode(ch).toLowerCase().charCodeAt(0);
}
function isDigit(ch) {
return ch >= 48 && ch <= 57;
}
function isWordChar(ch) {
return isUpperCaseLetter(ch) || isLowerCaseLetter(ch) || isDigit(ch) || ch === 95 || ch === 36;
}
function breakPatternIntoTextChunks(pattern) {
var result = [];
var wordStart = 0;
var wordLength = 0;
for (var i = 0; i < pattern.length; i++) {
var ch = pattern.charCodeAt(i);
if (isWordChar(ch)) {
if (wordLength++ === 0) {
wordStart = i;
}
}
else {
if (wordLength > 0) {
result.push(createTextChunk(pattern.substr(wordStart, wordLength)));
wordLength = 0;
}
}
}
if (wordLength > 0) {
result.push(createTextChunk(pattern.substr(wordStart, wordLength)));
}
return result;
}
function createTextChunk(text) {
var textLowerCase = text.toLowerCase();
return {
text: text,
textLowerCase: textLowerCase,
isLowerCase: text === textLowerCase,
characterSpans: breakIntoCharacterSpans(text)
};
}
function breakIntoCharacterSpans(identifier) {
return breakIntoSpans(identifier, false);
}
ts.breakIntoCharacterSpans = breakIntoCharacterSpans;
function breakIntoWordSpans(identifier) {
return breakIntoSpans(identifier, true);
}
ts.breakIntoWordSpans = breakIntoWordSpans;
function breakIntoSpans(identifier, word) {
var result = [];
var wordStart = 0;
for (var i = 1, n = identifier.length; i < n; i++) {
var lastIsDigit = isDigit(identifier.charCodeAt(i - 1));
var currentIsDigit = isDigit(identifier.charCodeAt(i));
var hasTransitionFromLowerToUpper = transitionFromLowerToUpper(identifier, word, i);
var hasTransitionFromUpperToLower = transitionFromUpperToLower(identifier, word, i, wordStart);
if (charIsPunctuation(identifier.charCodeAt(i - 1)) ||
charIsPunctuation(identifier.charCodeAt(i)) ||
lastIsDigit != currentIsDigit ||
hasTransitionFromLowerToUpper ||
hasTransitionFromUpperToLower) {
if (!isAllPunctuation(identifier, wordStart, i)) {
result.push(ts.createTextSpan(wordStart, i - wordStart));
}
wordStart = i;
}
}
if (!isAllPunctuation(identifier, wordStart, identifier.length)) {
result.push(ts.createTextSpan(wordStart, identifier.length - wordStart));
}
return result;
}
function charIsPunctuation(ch) {
switch (ch) {
case 33:
case 34:
case 35:
case 37:
case 38:
case 39:
case 40:
case 41:
case 42:
case 44:
case 45:
case 46:
case 47:
case 58:
case 59:
case 63:
case 64:
case 91:
case 92:
case 93:
case 95:
case 123:
case 125:
return true;
}
return false;
}
function isAllPunctuation(identifier, start, end) {
for (var i = start; i < end; i++) {
var ch = identifier.charCodeAt(i);
if (!charIsPunctuation(ch) || ch === 95 || ch === 36) {
return false;
}
}
return true;
}
function transitionFromUpperToLower(identifier, word, index, wordStart) {
if (word) {
if (index != wordStart &&
index + 1 < identifier.length) {
var currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index));
var nextIsLower = isLowerCaseLetter(identifier.charCodeAt(index + 1));
if (currentIsUpper && nextIsLower) {
for (var i = wordStart; i < index; i++) {
if (!isUpperCaseLetter(identifier.charCodeAt(i))) {
return false;
}
}
return true;
}
}
}
return false;
}
function transitionFromLowerToUpper(identifier, word, index) {
var lastIsUpper = isUpperCaseLetter(identifier.charCodeAt(index - 1));
var currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index));
var transition = word ? (currentIsUpper && !lastIsUpper) : currentIsUpper;
return transition;
}
})(ts || (ts = {}));
var ts;
(function (ts) {
var SignatureHelp;
(function (SignatureHelp) {
var emptyArray = [];
var ArgumentListKind;
(function (ArgumentListKind) {
ArgumentListKind[ArgumentListKind["TypeArguments"] = 0] = "TypeArguments";
ArgumentListKind[ArgumentListKind["CallArguments"] = 1] = "CallArguments";
ArgumentListKind[ArgumentListKind["TaggedTemplateArguments"] = 2] = "TaggedTemplateArguments";
})(ArgumentListKind || (ArgumentListKind = {}));
function getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken) {
var startingToken = ts.findTokenOnLeftOfPosition(sourceFile, position);
if (!startingToken) {
return undefined;
}
var argumentInfo = getContainingArgumentInfo(startingToken);
cancellationToken.throwIfCancellationRequested();
if (!argumentInfo) {
return undefined;
}
var call = argumentInfo.invocation;
var candidates = [];
var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates);
cancellationToken.throwIfCancellationRequested();
if (!candidates.length) {
return undefined;
}
return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo);
function getImmediatelyContainingArgumentInfo(node) {
if (node.parent.kind === 153 || node.parent.kind === 154) {
var callExpression = node.parent;
if (node.kind === 24 ||
node.kind === 16) {
var list = getChildListThatStartsWithOpenerToken(callExpression, node, sourceFile);
var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos;
ts.Debug.assert(list !== undefined);
return {
kind: isTypeArgList ? 0 : 1,
invocation: callExpression,
argumentsSpan: getApplicableSpanForArguments(list),
argumentIndex: 0,
argumentCount: getCommaBasedArgCount(list)
};
}
var listItemInfo = ts.findListItemInfo(node);
if (listItemInfo) {
var list = listItemInfo.list;
var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos;
var argumentIndex = (listItemInfo.listItemIndex + 1) >> 1;
return {
kind: isTypeArgList ? 0 : 1,
invocation: callExpression,
argumentsSpan: getApplicableSpanForArguments(list),
argumentIndex: argumentIndex,
argumentCount: getCommaBasedArgCount(list)
};
}
}
else if (node.kind === 10 && node.parent.kind === 155) {
if (ts.isInsideTemplateLiteral(node, position)) {
return getArgumentListInfoForTemplate(node.parent, 0);
}
}
else if (node.kind === 11 && node.parent.parent.kind === 155) {
var templateExpression = node.parent;
var tagExpression = templateExpression.parent;
ts.Debug.assert(templateExpression.kind === 167);
var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1;
return getArgumentListInfoForTemplate(tagExpression, argumentIndex);
}
else if (node.parent.kind === 171 && node.parent.parent.parent.kind === 155) {
var templateSpan = node.parent;
var templateExpression = templateSpan.parent;
var tagExpression = templateExpression.parent;
ts.Debug.assert(templateExpression.kind === 167);
if (node.kind === 13 && !ts.isInsideTemplateLiteral(node, position)) {
return undefined;
}
var spanIndex = templateExpression.templateSpans.indexOf(templateSpan);
var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node);
return getArgumentListInfoForTemplate(tagExpression, argumentIndex);
}
return undefined;
}
function getCommaBasedArgCount(argumentsList) {
return argumentsList.getChildCount() === 0 ? 0 : 1 + ts.countWhere(argumentsList.getChildren(), function (arg) { return arg.kind === 23; });
}
function getArgumentIndexForTemplatePiece(spanIndex, node) {
ts.Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node.");
if (ts.isTemplateLiteralKind(node.kind)) {
if (ts.isInsideTemplateLiteral(node, position)) {
return 0;
}
return spanIndex + 2;
}
return spanIndex + 1;
}
function getArgumentListInfoForTemplate(tagExpression, argumentIndex) {
var argumentCount = tagExpression.template.kind === 10 ? 1 : tagExpression.template.templateSpans.length + 1;
return {
kind: 2,
invocation: tagExpression,
argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression),
argumentIndex: argumentIndex,
argumentCount: argumentCount
};
}
function getApplicableSpanForArguments(argumentsList) {
var applicableSpanStart = argumentsList.getFullStart();
var applicableSpanEnd = ts.skipTrivia(sourceFile.text, argumentsList.getEnd(), false);
return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart);
}
function getApplicableSpanForTaggedTemplate(taggedTemplate) {
var template = taggedTemplate.template;
var applicableSpanStart = template.getStart();
var applicableSpanEnd = template.getEnd();
if (template.kind === 167) {
var lastSpan = ts.lastOrUndefined(template.templateSpans);
if (lastSpan.literal.getFullWidth() === 0) {
applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, false);
}
}
return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart);
}
function getContainingArgumentInfo(node) {
for (var n = node; n.kind !== 210; n = n.parent) {
if (ts.isFunctionBlock(n)) {
return undefined;
}
if (n.pos < n.parent.pos || n.end > n.parent.end) {
ts.Debug.fail("Node of kind " + n.kind + " is not a subspan of its parent of kind " + n.parent.kind);
}
var argumentInfo = getImmediatelyContainingArgumentInfo(n);
if (argumentInfo) {
return argumentInfo;
}
}
return undefined;
}
function getChildListThatStartsWithOpenerToken(parent, openerToken, sourceFile) {
var children = parent.getChildren(sourceFile);
var indexOfOpenerToken = children.indexOf(openerToken);
ts.Debug.assert(indexOfOpenerToken >= 0 && children.length > indexOfOpenerToken + 1);
return children[indexOfOpenerToken + 1];
}
function selectBestInvalidOverloadIndex(candidates, argumentCount) {
var maxParamsSignatureIndex = -1;
var maxParams = -1;
for (var i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.hasRestParameter || candidate.parameters.length >= argumentCount) {
return i;
}
if (candidate.parameters.length > maxParams) {
maxParams = candidate.parameters.length;
maxParamsSignatureIndex = i;
}
}
return maxParamsSignatureIndex;
}
function createSignatureHelpItems(candidates, bestSignature, argumentListInfo) {
var applicableSpan = argumentListInfo.argumentsSpan;
var isTypeParameterList = argumentListInfo.kind === 0;
var invocation = argumentListInfo.invocation;
var callTarget = ts.getInvokedExpression(invocation);
var callTargetSymbol = typeInfoResolver.getSymbolAtLocation(callTarget);
var callTargetDisplayParts = callTargetSymbol && ts.symbolToDisplayParts(typeInfoResolver, callTargetSymbol, undefined, undefined);
var items = ts.map(candidates, function (candidateSignature) {
var signatureHelpParameters;
var prefixDisplayParts = [];
var suffixDisplayParts = [];
if (callTargetDisplayParts) {
prefixDisplayParts.push.apply(prefixDisplayParts, callTargetDisplayParts);
}
if (isTypeParameterList) {
prefixDisplayParts.push(ts.punctuationPart(24));
var typeParameters = candidateSignature.typeParameters;
signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray;
suffixDisplayParts.push(ts.punctuationPart(25));
var parameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.parameters, writer, invocation); });
suffixDisplayParts.push.apply(suffixDisplayParts, parameterParts);
}
else {
var typeParameterParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation); });
prefixDisplayParts.push.apply(prefixDisplayParts, typeParameterParts);
prefixDisplayParts.push(ts.punctuationPart(16));
var parameters = candidateSignature.parameters;
signatureHelpParameters = parameters.length > 0 ? ts.map(parameters, createSignatureHelpParameterForParameter) : emptyArray;
suffixDisplayParts.push(ts.punctuationPart(17));
}
var returnTypeParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, invocation); });
suffixDisplayParts.push.apply(suffixDisplayParts, returnTypeParts);
return {
isVariadic: candidateSignature.hasRestParameter,
prefixDisplayParts: prefixDisplayParts,
suffixDisplayParts: suffixDisplayParts,
separatorDisplayParts: [ts.punctuationPart(23), ts.spacePart()],
parameters: signatureHelpParameters,
documentation: candidateSignature.getDocumentationComment()
};
});
var argumentIndex = argumentListInfo.argumentIndex;
var argumentCount = argumentListInfo.argumentCount;
var selectedItemIndex = candidates.indexOf(bestSignature);
if (selectedItemIndex < 0) {
selectedItemIndex = selectBestInvalidOverloadIndex(candidates, argumentCount);
}
return {
items: items,
applicableSpan: applicableSpan,
selectedItemIndex: selectedItemIndex,
argumentIndex: argumentIndex,
argumentCount: argumentCount
};
function createSignatureHelpParameterForParameter(parameter) {
var displayParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, invocation); });
var isOptional = ts.hasQuestionToken(parameter.valueDeclaration);
return {
name: parameter.name,
documentation: parameter.getDocumentationComment(),
displayParts: displayParts,
isOptional: isOptional
};
}
function createSignatureHelpParameterForTypeParameter(typeParameter) {
var displayParts = ts.mapToDisplayParts(function (writer) { return typeInfoResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, invocation); });
return {
name: typeParameter.symbol.name,
documentation: emptyArray,
displayParts: displayParts,
isOptional: false
};
}
}
}
SignatureHelp.getSignatureHelpItems = getSignatureHelpItems;
})(SignatureHelp = ts.SignatureHelp || (ts.SignatureHelp = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
function getEndLinePosition(line, sourceFile) {
ts.Debug.assert(line >= 0);
var lineStarts = sourceFile.getLineStarts();
var lineIndex = line;
if (lineIndex + 1 === lineStarts.length) {
return sourceFile.text.length - 1;
}
else {
var start = lineStarts[lineIndex];
var pos = lineStarts[lineIndex + 1] - 1;
ts.Debug.assert(ts.isLineBreak(sourceFile.text.charCodeAt(pos)));
while (start <= pos && ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
pos--;
}
return pos;
}
}
ts.getEndLinePosition = getEndLinePosition;
function getLineStartPositionForPosition(position, sourceFile) {
var lineStarts = sourceFile.getLineStarts();
var line = sourceFile.getLineAndCharacterOfPosition(position).line;
return lineStarts[line];
}
ts.getLineStartPositionForPosition = getLineStartPositionForPosition;
function rangeContainsRange(r1, r2) {
return startEndContainsRange(r1.pos, r1.end, r2);
}
ts.rangeContainsRange = rangeContainsRange;
function startEndContainsRange(start, end, range) {
return start <= range.pos && end >= range.end;
}
ts.startEndContainsRange = startEndContainsRange;
function rangeContainsStartEnd(range, start, end) {
return range.pos <= start && range.end >= end;
}
ts.rangeContainsStartEnd = rangeContainsStartEnd;
function rangeOverlapsWithStartEnd(r1, start, end) {
return startEndOverlapsWithStartEnd(r1.pos, r1.end, start, end);
}
ts.rangeOverlapsWithStartEnd = rangeOverlapsWithStartEnd;
function startEndOverlapsWithStartEnd(start1, end1, start2, end2) {
var start = Math.max(start1, start2);
var end = Math.min(end1, end2);
return start < end;
}
ts.startEndOverlapsWithStartEnd = startEndOverlapsWithStartEnd;
function findListItemInfo(node) {
var list = findContainingList(node);
if (!list) {
return undefined;
}
var children = list.getChildren();
var listItemIndex = ts.indexOf(children, node);
return {
listItemIndex: listItemIndex,
list: list
};
}
ts.findListItemInfo = findListItemInfo;
function findChildOfKind(n, kind, sourceFile) {
return ts.forEach(n.getChildren(sourceFile), function (c) { return c.kind === kind && c; });
}
ts.findChildOfKind = findChildOfKind;
function findContainingList(node) {
var syntaxList = ts.forEach(node.parent.getChildren(), function (c) {
if (c.kind === 211 && c.pos <= node.pos && c.end >= node.end) {
return c;
}
});
return syntaxList;
}
ts.findContainingList = findContainingList;
function getTouchingWord(sourceFile, position) {
return getTouchingToken(sourceFile, position, function (n) { return isWord(n.kind); });
}
ts.getTouchingWord = getTouchingWord;
function getTouchingPropertyName(sourceFile, position) {
return getTouchingToken(sourceFile, position, function (n) { return isPropertyName(n.kind); });
}
ts.getTouchingPropertyName = getTouchingPropertyName;
function getTouchingToken(sourceFile, position, includeItemAtEndPosition) {
return getTokenAtPositionWorker(sourceFile, position, false, includeItemAtEndPosition);
}
ts.getTouchingToken = getTouchingToken;
function getTokenAtPosition(sourceFile, position) {
return getTokenAtPositionWorker(sourceFile, position, true, undefined);
}
ts.getTokenAtPosition = getTokenAtPosition;
function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includeItemAtEndPosition) {
var current = sourceFile;
outer: while (true) {
if (isToken(current)) {
return current;
}
for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) {
var child = current.getChildAt(i);
var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile);
if (start <= position) {
var end = child.getEnd();
if (position < end || (position === end && child.kind === 1)) {
current = child;
continue outer;
}
else if (includeItemAtEndPosition && end === position) {
var previousToken = findPrecedingToken(position, sourceFile, child);
if (previousToken && includeItemAtEndPosition(previousToken)) {
return previousToken;
}
}
}
}
return current;
}
}
function findTokenOnLeftOfPosition(file, position) {
var tokenAtPosition = getTokenAtPosition(file, position);
if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) {
return tokenAtPosition;
}
return findPrecedingToken(position, file);
}
ts.findTokenOnLeftOfPosition = findTokenOnLeftOfPosition;
function findNextToken(previousToken, parent) {
return find(parent);
function find(n) {
if (isToken(n) && n.pos === previousToken.end) {
return n;
}
var children = n.getChildren();
for (var i = 0, len = children.length; i < len; ++i) {
var child = children[i];
var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) ||
(child.pos === previousToken.end);
if (shouldDiveInChildNode && nodeHasTokens(child)) {
return find(child);
}
}
return undefined;
}
}
ts.findNextToken = findNextToken;
function findPrecedingToken(position, sourceFile, startNode) {
return find(startNode || sourceFile);
function findRightmostToken(n) {
if (isToken(n)) {
return n;
}
var children = n.getChildren();
var candidate = findRightmostChildNodeWithTokens(children, children.length);
return candidate && findRightmostToken(candidate);
}
function find(n) {
if (isToken(n)) {
return n;
}
var children = n.getChildren();
for (var i = 0, len = children.length; i < len; ++i) {
var child = children[i];
if (nodeHasTokens(child)) {
if (position <= child.end) {
if (child.getStart(sourceFile) >= position) {
var candidate = findRightmostChildNodeWithTokens(children, i);
return candidate && findRightmostToken(candidate);
}
else {
return find(child);
}
}
}
}
ts.Debug.assert(startNode !== undefined || n.kind === 210);
if (children.length) {
var candidate = findRightmostChildNodeWithTokens(children, children.length);
return candidate && findRightmostToken(candidate);
}
}
function findRightmostChildNodeWithTokens(children, exclusiveStartPosition) {
for (var i = exclusiveStartPosition - 1; i >= 0; --i) {
if (nodeHasTokens(children[i])) {
return children[i];
}
}
}
}
ts.findPrecedingToken = findPrecedingToken;
function nodeHasTokens(n) {
return n.getWidth() !== 0;
}
function getNodeModifiers(node) {
var flags = ts.getCombinedNodeFlags(node);
var result = [];
if (flags & 32)
result.push(ts.ScriptElementKindModifier.privateMemberModifier);
if (flags & 64)
result.push(ts.ScriptElementKindModifier.protectedMemberModifier);
if (flags & 16)
result.push(ts.ScriptElementKindModifier.publicMemberModifier);
if (flags & 128)
result.push(ts.ScriptElementKindModifier.staticModifier);
if (flags & 1)
result.push(ts.ScriptElementKindModifier.exportedModifier);
if (ts.isInAmbientContext(node))
result.push(ts.ScriptElementKindModifier.ambientModifier);
return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none;
}
ts.getNodeModifiers = getNodeModifiers;
function getTypeArgumentOrTypeParameterList(node) {
if (node.kind === 137 || node.kind === 153) {
return node.typeArguments;
}
if (ts.isAnyFunction(node) || node.kind === 194 || node.kind === 195) {
return node.typeParameters;
}
return undefined;
}
ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList;
function isToken(n) {
return n.kind >= 0 && n.kind <= 122;
}
ts.isToken = isToken;
function isWord(kind) {
return kind === 64 || ts.isKeyword(kind);
}
function isPropertyName(kind) {
return kind === 8 || kind === 7 || isWord(kind);
}
function isComment(kind) {
return kind === 2 || kind === 3;
}
ts.isComment = isComment;
function isPunctuation(kind) {
return 14 <= kind && kind <= 63;
}
ts.isPunctuation = isPunctuation;
function isInsideTemplateLiteral(node, position) {
return ts.isTemplateLiteralKind(node.kind) && (node.getStart() < position && position < node.getEnd()) || (!!node.isUnterminated && position === node.getEnd());
}
ts.isInsideTemplateLiteral = isInsideTemplateLiteral;
function compareDataObjects(dst, src) {
for (var e in dst) {
if (typeof dst[e] === "object") {
if (!compareDataObjects(dst[e], src[e])) {
return false;
}
}
else if (typeof dst[e] !== "function") {
if (dst[e] !== src[e]) {
return false;
}
}
}
return true;
}
ts.compareDataObjects = compareDataObjects;
})(ts || (ts = {}));
var ts;
(function (ts) {
function isFirstDeclarationOfSymbolParameter(symbol) {
return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 126;
}
ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter;
var displayPartWriter = getDisplayPartWriter();
function getDisplayPartWriter() {
var displayParts;
var lineStart;
var indent;
resetWriter();
return {
displayParts: function () { return displayParts; },
writeKeyword: function (text) { return writeKind(text, 5); },
writeOperator: function (text) { return writeKind(text, 12); },
writePunctuation: function (text) { return writeKind(text, 15); },
writeSpace: function (text) { return writeKind(text, 16); },
writeStringLiteral: function (text) { return writeKind(text, 8); },
writeParameter: function (text) { return writeKind(text, 13); },
writeSymbol: writeSymbol,
writeLine: writeLine,
increaseIndent: function () {
indent++;
},
decreaseIndent: function () {
indent--;
},
clear: resetWriter,
trackSymbol: function () { }
};
function writeIndent() {
if (lineStart) {
var indentString = ts.getIndentString(indent);
if (indentString) {
displayParts.push(displayPart(indentString, 16));
}
lineStart = false;
}
}
function writeKind(text, kind) {
writeIndent();
displayParts.push(displayPart(text, kind));
}
function writeSymbol(text, symbol) {
writeIndent();
displayParts.push(symbolPart(text, symbol));
}
function writeLine() {
displayParts.push(lineBreakPart());
lineStart = true;
}
function resetWriter() {
displayParts = [];
lineStart = true;
indent = 0;
}
}
function symbolPart(text, symbol) {
return displayPart(text, displayPartKind(symbol), symbol);
function displayPartKind(symbol) {
var flags = symbol.flags;
if (flags & 3) {
return isFirstDeclarationOfSymbolParameter(symbol) ? 13 : 9;
}
else if (flags & 4) {
return 14;
}
else if (flags & 32768) {
return 14;
}
else if (flags & 65536) {
return 14;
}
else if (flags & 8) {
return 19;
}
else if (flags & 16) {
return 20;
}
else if (flags & 32) {
return 1;
}
else if (flags & 64) {
return 4;
}
else if (flags & 384) {
return 2;
}
else if (flags & 1536) {
return 11;
}
else if (flags & 8192) {
return 10;
}
else if (flags & 262144) {
return 18;
}
else if (flags & 524288) {
return 0;
}
else if (flags & 8388608) {
return 0;
}
return 17;
}
}
ts.symbolPart = symbolPart;
function displayPart(text, kind, symbol) {
return {
text: text,
kind: ts.SymbolDisplayPartKind[kind]
};
}
ts.displayPart = displayPart;
function spacePart() {
return displayPart(" ", 16);
}
ts.spacePart = spacePart;
function keywordPart(kind) {
return displayPart(ts.tokenToString(kind), 5);
}
ts.keywordPart = keywordPart;
function punctuationPart(kind) {
return displayPart(ts.tokenToString(kind), 15);
}
ts.punctuationPart = punctuationPart;
function operatorPart(kind) {
return displayPart(ts.tokenToString(kind), 12);
}
ts.operatorPart = operatorPart;
function textPart(text) {
return displayPart(text, 17);
}
ts.textPart = textPart;
function lineBreakPart() {
return displayPart("\n", 6);
}
ts.lineBreakPart = lineBreakPart;
function mapToDisplayParts(writeDisplayParts) {
writeDisplayParts(displayPartWriter);
var result = displayPartWriter.displayParts();
displayPartWriter.clear();
return result;
}
ts.mapToDisplayParts = mapToDisplayParts;
function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags) {
return mapToDisplayParts(function (writer) {
typechecker.getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
});
}
ts.typeToDisplayParts = typeToDisplayParts;
function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags) {
return mapToDisplayParts(function (writer) {
typeChecker.getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags);
});
}
ts.symbolToDisplayParts = symbolToDisplayParts;
function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags) {
return mapToDisplayParts(function (writer) {
typechecker.getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags);
});
}
ts.signatureToDisplayParts = signatureToDisplayParts;
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var scanner = ts.createScanner(2, false);
var ScanAction;
(function (ScanAction) {
ScanAction[ScanAction["Scan"] = 0] = "Scan";
ScanAction[ScanAction["RescanGreaterThanToken"] = 1] = "RescanGreaterThanToken";
ScanAction[ScanAction["RescanSlashToken"] = 2] = "RescanSlashToken";
ScanAction[ScanAction["RescanTemplateToken"] = 3] = "RescanTemplateToken";
})(ScanAction || (ScanAction = {}));
function getFormattingScanner(sourceFile, startPos, endPos) {
scanner.setText(sourceFile.text);
scanner.setTextPos(startPos);
var wasNewLine = true;
var leadingTrivia;
var trailingTrivia;
var savedPos;
var lastScanAction;
var lastTokenInfo;
return {
advance: advance,
readTokenInfo: readTokenInfo,
isOnToken: isOnToken,
lastTrailingTriviaWasNewLine: function () { return wasNewLine; },
close: function () {
lastTokenInfo = undefined;
scanner.setText(undefined);
}
};
function advance() {
lastTokenInfo = undefined;
var isStarted = scanner.getStartPos() !== startPos;
if (isStarted) {
if (trailingTrivia) {
ts.Debug.assert(trailingTrivia.length !== 0);
wasNewLine = trailingTrivia[trailingTrivia.length - 1].kind === 4;
}
else {
wasNewLine = false;
}
}
leadingTrivia = undefined;
trailingTrivia = undefined;
if (!isStarted) {
scanner.scan();
}
var t;
var pos = scanner.getStartPos();
while (pos < endPos) {
var t = scanner.getToken();
if (!ts.isTrivia(t)) {
break;
}
scanner.scan();
var item = {
pos: pos,
end: scanner.getStartPos(),
kind: t
};
pos = scanner.getStartPos();
if (!leadingTrivia) {
leadingTrivia = [];
}
leadingTrivia.push(item);
}
savedPos = scanner.getStartPos();
}
function shouldRescanGreaterThanToken(node) {
if (node) {
switch (node.kind) {
case 27:
case 59:
case 60:
case 42:
case 41:
return true;
}
}
return false;
}
function shouldRescanSlashToken(container) {
return container.kind === 9;
}
function shouldRescanTemplateToken(container) {
return container.kind === 12 ||
container.kind === 13;
}
function startsWithSlashToken(t) {
return t === 36 || t === 56;
}
function readTokenInfo(n) {
if (!isOnToken()) {
return {
leadingTrivia: leadingTrivia,
trailingTrivia: undefined,
token: undefined
};
}
var expectedScanAction = shouldRescanGreaterThanToken(n) ? 1 : shouldRescanSlashToken(n) ? 2 : shouldRescanTemplateToken(n) ? 3 : 0;
if (lastTokenInfo && expectedScanAction === lastScanAction) {
return fixTokenKind(lastTokenInfo, n);
}
if (scanner.getStartPos() !== savedPos) {
ts.Debug.assert(lastTokenInfo !== undefined);
scanner.setTextPos(savedPos);
scanner.scan();
}
var currentToken = scanner.getToken();
if (expectedScanAction === 1 && currentToken === 25) {
currentToken = scanner.reScanGreaterToken();
ts.Debug.assert(n.kind === currentToken);
lastScanAction = 1;
}
else if (expectedScanAction === 2 && startsWithSlashToken(currentToken)) {
currentToken = scanner.reScanSlashToken();
ts.Debug.assert(n.kind === currentToken);
lastScanAction = 2;
}
else if (expectedScanAction === 3 && currentToken === 15) {
currentToken = scanner.reScanTemplateToken();
lastScanAction = 3;
}
else {
lastScanAction = 0;
}
var token = {
pos: scanner.getStartPos(),
end: scanner.getTextPos(),
kind: currentToken
};
if (trailingTrivia) {
trailingTrivia = undefined;
}
while (scanner.getStartPos() < endPos) {
currentToken = scanner.scan();
if (!ts.isTrivia(currentToken)) {
break;
}
var trivia = {
pos: scanner.getStartPos(),
end: scanner.getTextPos(),
kind: currentToken
};
if (!trailingTrivia) {
trailingTrivia = [];
}
trailingTrivia.push(trivia);
if (currentToken === 4) {
scanner.scan();
break;
}
}
lastTokenInfo = {
leadingTrivia: leadingTrivia,
trailingTrivia: trailingTrivia,
token: token
};
return fixTokenKind(lastTokenInfo, n);
}
function isOnToken() {
var current = (lastTokenInfo && lastTokenInfo.token.kind) || scanner.getToken();
var startPos = (lastTokenInfo && lastTokenInfo.token.pos) || scanner.getStartPos();
return startPos < endPos && current !== 1 && !ts.isTrivia(current);
}
function fixTokenKind(tokenInfo, container) {
if (ts.isToken(container) && tokenInfo.token.kind !== container.kind) {
tokenInfo.token.kind = container.kind;
}
return tokenInfo;
}
}
formatting.getFormattingScanner = getFormattingScanner;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var FormattingContext = (function () {
function FormattingContext(sourceFile, formattingRequestKind) {
this.sourceFile = sourceFile;
this.formattingRequestKind = formattingRequestKind;
}
FormattingContext.prototype.updateContext = function (currentRange, currentTokenParent, nextRange, nextTokenParent, commonParent) {
ts.Debug.assert(currentRange !== undefined, "currentTokenSpan is null");
ts.Debug.assert(currentTokenParent !== undefined, "currentTokenParent is null");
ts.Debug.assert(nextRange !== undefined, "nextTokenSpan is null");
ts.Debug.assert(nextTokenParent !== undefined, "nextTokenParent is null");
ts.Debug.assert(commonParent !== undefined, "commonParent is null");
this.currentTokenSpan = currentRange;
this.currentTokenParent = currentTokenParent;
this.nextTokenSpan = nextRange;
this.nextTokenParent = nextTokenParent;
this.contextNode = commonParent;
this.contextNodeAllOnSameLine = undefined;
this.nextNodeAllOnSameLine = undefined;
this.tokensAreOnSameLine = undefined;
this.contextNodeBlockIsOnOneLine = undefined;
this.nextNodeBlockIsOnOneLine = undefined;
};
FormattingContext.prototype.ContextNodeAllOnSameLine = function () {
if (this.contextNodeAllOnSameLine === undefined) {
this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode);
}
return this.contextNodeAllOnSameLine;
};
FormattingContext.prototype.NextNodeAllOnSameLine = function () {
if (this.nextNodeAllOnSameLine === undefined) {
this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent);
}
return this.nextNodeAllOnSameLine;
};
FormattingContext.prototype.TokensAreOnSameLine = function () {
if (this.tokensAreOnSameLine === undefined) {
var startLine = this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line;
var endLine = this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;
this.tokensAreOnSameLine = (startLine == endLine);
}
return this.tokensAreOnSameLine;
};
FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () {
if (this.contextNodeBlockIsOnOneLine === undefined) {
this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode);
}
return this.contextNodeBlockIsOnOneLine;
};
FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () {
if (this.nextNodeBlockIsOnOneLine === undefined) {
this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent);
}
return this.nextNodeBlockIsOnOneLine;
};
FormattingContext.prototype.NodeIsOnOneLine = function (node) {
var startLine = this.sourceFile.getLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line;
var endLine = this.sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line;
return startLine == endLine;
};
FormattingContext.prototype.BlockIsOnOneLine = function (node) {
var openBrace = ts.findChildOfKind(node, 14, this.sourceFile);
var closeBrace = ts.findChildOfKind(node, 15, this.sourceFile);
if (openBrace && closeBrace) {
var startLine = this.sourceFile.getLineAndCharacterOfPosition(openBrace.getEnd()).line;
var endLine = this.sourceFile.getLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line;
return startLine === endLine;
}
return false;
};
return FormattingContext;
})();
formatting.FormattingContext = FormattingContext;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
(function (FormattingRequestKind) {
FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument";
FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection";
FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter";
FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon";
FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace";
})(formatting.FormattingRequestKind || (formatting.FormattingRequestKind = {}));
var FormattingRequestKind = formatting.FormattingRequestKind;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var Rule = (function () {
function Rule(Descriptor, Operation, Flag) {
if (Flag === void 0) { Flag = 0; }
this.Descriptor = Descriptor;
this.Operation = Operation;
this.Flag = Flag;
}
Rule.prototype.toString = function () {
return "[desc=" + this.Descriptor + "," +
"operation=" + this.Operation + "," +
"flag=" + this.Flag + "]";
};
return Rule;
})();
formatting.Rule = Rule;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
(function (RuleAction) {
RuleAction[RuleAction["Ignore"] = 1] = "Ignore";
RuleAction[RuleAction["Space"] = 2] = "Space";
RuleAction[RuleAction["NewLine"] = 4] = "NewLine";
RuleAction[RuleAction["Delete"] = 8] = "Delete";
})(formatting.RuleAction || (formatting.RuleAction = {}));
var RuleAction = formatting.RuleAction;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var RuleDescriptor = (function () {
function RuleDescriptor(LeftTokenRange, RightTokenRange) {
this.LeftTokenRange = LeftTokenRange;
this.RightTokenRange = RightTokenRange;
}
RuleDescriptor.prototype.toString = function () {
return "[leftRange=" + this.LeftTokenRange + "," +
"rightRange=" + this.RightTokenRange + "]";
};
RuleDescriptor.create1 = function (left, right) {
return RuleDescriptor.create4(formatting.Shared.TokenRange.FromToken(left), formatting.Shared.TokenRange.FromToken(right));
};
RuleDescriptor.create2 = function (left, right) {
return RuleDescriptor.create4(left, formatting.Shared.TokenRange.FromToken(right));
};
RuleDescriptor.create3 = function (left, right) {
return RuleDescriptor.create4(formatting.Shared.TokenRange.FromToken(left), right);
};
RuleDescriptor.create4 = function (left, right) {
return new RuleDescriptor(left, right);
};
return RuleDescriptor;
})();
formatting.RuleDescriptor = RuleDescriptor;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
(function (RuleFlags) {
RuleFlags[RuleFlags["None"] = 0] = "None";
RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines";
})(formatting.RuleFlags || (formatting.RuleFlags = {}));
var RuleFlags = formatting.RuleFlags;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var RuleOperation = (function () {
function RuleOperation() {
this.Context = null;
this.Action = null;
}
RuleOperation.prototype.toString = function () {
return "[context=" + this.Context + "," +
"action=" + this.Action + "]";
};
RuleOperation.create1 = function (action) {
return RuleOperation.create2(formatting.RuleOperationContext.Any, action);
};
RuleOperation.create2 = function (context, action) {
var result = new RuleOperation();
result.Context = context;
result.Action = action;
return result;
};
return RuleOperation;
})();
formatting.RuleOperation = RuleOperation;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var RuleOperationContext = (function () {
function RuleOperationContext() {
var funcs = [];
for (var _i = 0; _i < arguments.length; _i++) {
funcs[_i - 0] = arguments[_i];
}
this.customContextChecks = funcs;
}
RuleOperationContext.prototype.IsAny = function () {
return this == RuleOperationContext.Any;
};
RuleOperationContext.prototype.InContext = function (context) {
if (this.IsAny()) {
return true;
}
for (var i = 0, len = this.customContextChecks.length; i < len; i++) {
if (!this.customContextChecks[i](context)) {
return false;
}
}
return true;
};
RuleOperationContext.Any = new RuleOperationContext();
return RuleOperationContext;
})();
formatting.RuleOperationContext = RuleOperationContext;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var Rules = (function () {
function Rules() {
this.IgnoreBeforeComment = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.Comments), formatting.RuleOperation.create1(1));
this.IgnoreAfterLineComment = new formatting.Rule(formatting.RuleDescriptor.create3(2, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create1(1));
this.NoSpaceBeforeSemicolon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 22), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeColon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 51), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8));
this.NoSpaceBeforeQMark = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 50), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8));
this.SpaceAfterColon = new formatting.Rule(formatting.RuleDescriptor.create3(51, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2));
this.SpaceAfterQMark = new formatting.Rule(formatting.RuleDescriptor.create3(50, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 2));
this.SpaceAfterSemicolon = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 2));
this.SpaceBetweenCloseBraceAndElse = new formatting.Rule(formatting.RuleDescriptor.create1(15, 75), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceBetweenCloseBraceAndWhile = new formatting.Rule(formatting.RuleDescriptor.create1(15, 99), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.NoSpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.FromTokens([17, 19, 23, 22])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeDot = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 20), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterDot = new formatting.Rule(formatting.RuleDescriptor.create3(20, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 18), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create3(18, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 19), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create3(19, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.FunctionOpenBraceLeftTokenRange = formatting.Shared.TokenRange.AnyIncludingMultilineComments;
this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1);
this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([64, 3]);
this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1);
this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([17, 3, 74, 95, 80, 75]);
this.SpaceBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1);
this.SpaceAfterOpenBrace = new formatting.Rule(formatting.RuleDescriptor.create3(14, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2));
this.SpaceBeforeCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2));
this.NoSpaceBetweenEmptyBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 8));
this.NewLineAfterOpenBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create3(14, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4));
this.NewLineBeforeCloseBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.AnyIncludingMultilineComments, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4));
this.NoSpaceAfterUnaryPrefixOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.UnaryPrefixOperators, formatting.Shared.TokenRange.UnaryPrefixExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8));
this.NoSpaceAfterUnaryPreincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(38, formatting.Shared.TokenRange.UnaryPreincrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterUnaryPredecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(39, formatting.Shared.TokenRange.UnaryPredecrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeUnaryPostincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostincrementExpressions, 38), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeUnaryPostdecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 39), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceAfterPostincrementWhenFollowedByAdd = new formatting.Rule(formatting.RuleDescriptor.create1(38, 33), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterAddWhenFollowedByUnaryPlus = new formatting.Rule(formatting.RuleDescriptor.create1(33, 33), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterAddWhenFollowedByPreincrement = new formatting.Rule(formatting.RuleDescriptor.create1(33, 38), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterPostdecrementWhenFollowedBySubtract = new formatting.Rule(formatting.RuleDescriptor.create1(39, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new formatting.Rule(formatting.RuleDescriptor.create1(34, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterSubtractWhenFollowedByPredecrement = new formatting.Rule(formatting.RuleDescriptor.create1(34, 39), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.NoSpaceBeforeComma = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 23), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceAfterCertainKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([97, 93, 87, 73, 89, 96]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.NoSpaceBeforeOpenParenInFuncCall = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext, Rules.IsPreviousTokenNotComma), 8));
this.SpaceAfterFunctionInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create3(82, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2));
this.NoSpaceBeforeOpenParenInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 8));
this.SpaceAfterVoidOperator = new formatting.Rule(formatting.RuleDescriptor.create3(98, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 2));
this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(89, 22), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([17, 74, 75, 66]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 2));
this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([95, 80]), 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([114, 118]), 64), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2));
this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(112, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([115, 116]), 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([68, 113, 76, 77, 78, 114, 101, 84, 102, 115, 105, 107, 118, 108]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([78, 101])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(8, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2));
this.SpaceAfterArrow = new formatting.Rule(formatting.RuleDescriptor.create3(32, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.NoSpaceAfterEllipsis = new formatting.Rule(formatting.RuleDescriptor.create1(21, 64), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterOptionalParameters = new formatting.Rule(formatting.RuleDescriptor.create3(50, formatting.Shared.TokenRange.FromTokens([17, 23])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 8));
this.NoSpaceBeforeOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.TypeNames, 24), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8));
this.NoSpaceBetweenCloseParenAndAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create1(17, 24), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8));
this.NoSpaceAfterOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.TypeNames), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8));
this.NoSpaceBeforeCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 25), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8));
this.NoSpaceAfterCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(25, formatting.Shared.TokenRange.FromTokens([16, 18, 25, 23])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 8));
this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(14, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 8));
this.HighPriorityCommonRules =
[
this.IgnoreBeforeComment,
this.IgnoreAfterLineComment,
this.NoSpaceBeforeColon,
this.SpaceAfterColon,
this.NoSpaceBeforeQMark,
this.SpaceAfterQMark,
this.NoSpaceBeforeDot,
this.NoSpaceAfterDot,
this.NoSpaceAfterUnaryPrefixOperator,
this.NoSpaceAfterUnaryPreincrementOperator,
this.NoSpaceAfterUnaryPredecrementOperator,
this.NoSpaceBeforeUnaryPostincrementOperator,
this.NoSpaceBeforeUnaryPostdecrementOperator,
this.SpaceAfterPostincrementWhenFollowedByAdd,
this.SpaceAfterAddWhenFollowedByUnaryPlus,
this.SpaceAfterAddWhenFollowedByPreincrement,
this.SpaceAfterPostdecrementWhenFollowedBySubtract,
this.SpaceAfterSubtractWhenFollowedByUnaryMinus,
this.SpaceAfterSubtractWhenFollowedByPredecrement,
this.NoSpaceAfterCloseBrace,
this.SpaceAfterOpenBrace,
this.SpaceBeforeCloseBrace,
this.NewLineBeforeCloseBraceInBlockContext,
this.SpaceAfterCloseBrace,
this.SpaceBetweenCloseBraceAndElse,
this.SpaceBetweenCloseBraceAndWhile,
this.NoSpaceBetweenEmptyBraceBrackets,
this.SpaceAfterFunctionInFuncDecl,
this.NewLineAfterOpenBraceInBlockContext,
this.SpaceAfterGetSetInMember,
this.NoSpaceBetweenReturnAndSemicolon,
this.SpaceAfterCertainKeywords,
this.NoSpaceBeforeOpenParenInFuncCall,
this.SpaceBeforeBinaryKeywordOperator,
this.SpaceAfterBinaryKeywordOperator,
this.SpaceAfterVoidOperator,
this.NoSpaceAfterConstructor,
this.NoSpaceAfterModuleImport,
this.SpaceAfterCertainTypeScriptKeywords,
this.SpaceBeforeCertainTypeScriptKeywords,
this.SpaceAfterModuleName,
this.SpaceAfterArrow,
this.NoSpaceAfterEllipsis,
this.NoSpaceAfterOptionalParameters,
this.NoSpaceBetweenEmptyInterfaceBraceBrackets,
this.NoSpaceBeforeOpenAngularBracket,
this.NoSpaceBetweenCloseParenAndAngularBracket,
this.NoSpaceAfterOpenAngularBracket,
this.NoSpaceBeforeCloseAngularBracket,
this.NoSpaceAfterCloseAngularBracket
];
this.LowPriorityCommonRules =
[
this.NoSpaceBeforeSemicolon,
this.SpaceBeforeOpenBraceInControl,
this.SpaceBeforeOpenBraceInFunction,
this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock,
this.NoSpaceBeforeComma,
this.NoSpaceBeforeOpenBracket,
this.NoSpaceAfterOpenBracket,
this.NoSpaceBeforeCloseBracket,
this.NoSpaceAfterCloseBracket,
this.SpaceAfterSemicolon,
this.NoSpaceBeforeOpenParenInFuncDecl,
this.SpaceBetweenStatements,
this.SpaceAfterTryFinally
];
this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.SpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 2));
this.NoSpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8));
this.NoSpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 8));
this.SpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 2));
this.NoSpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 8));
this.NewLineBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1);
this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 4), 1);
this.NewLineBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 14), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1);
this.SpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 2));
this.NoSpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(22, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 8));
this.SpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.SpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 2));
this.NoSpaceBetweenParens = new formatting.Rule(formatting.RuleDescriptor.create1(16, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.NoSpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 8));
this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2));
this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(82, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8));
}
Rules.prototype.getRuleName = function (rule) {
var o = this;
for (var name in o) {
if (o[name] === rule) {
return name;
}
}
throw new Error("Unknown rule");
};
Rules.IsForContext = function (context) {
return context.contextNode.kind === 179;
};
Rules.IsNotForContext = function (context) {
return !Rules.IsForContext(context);
};
Rules.IsBinaryOpContext = function (context) {
switch (context.contextNode.kind) {
case 165:
case 166:
return true;
case 200:
case 191:
case 126:
case 209:
case 128:
case 127:
return context.currentTokenSpan.kind === 52 || context.nextTokenSpan.kind === 52;
case 180:
return context.currentTokenSpan.kind === 85 || context.nextTokenSpan.kind === 85;
case 181:
return context.currentTokenSpan.kind === 122 || context.nextTokenSpan.kind === 122;
}
return false;
};
Rules.IsNotBinaryOpContext = function (context) {
return !Rules.IsBinaryOpContext(context);
};
Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) {
return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context);
};
Rules.IsBeforeMultilineBlockContext = function (context) {
return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine());
};
Rules.IsMultilineBlockContext = function (context) {
return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine());
};
Rules.IsSingleLineBlockContext = function (context) {
return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine());
};
Rules.IsBlockContext = function (context) {
return Rules.NodeIsBlockContext(context.contextNode);
};
Rules.IsBeforeBlockContext = function (context) {
return Rules.NodeIsBlockContext(context.nextTokenParent);
};
Rules.NodeIsBlockContext = function (node) {
if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) {
return true;
}
switch (node.kind) {
case 172:
case 186:
case 150:
case 199:
return true;
}
return false;
};
Rules.IsFunctionDeclContext = function (context) {
switch (context.contextNode.kind) {
case 193:
case 130:
case 129:
case 132:
case 133:
case 134:
case 158:
case 131:
case 159:
case 195:
return true;
}
return false;
};
Rules.IsTypeScriptDeclWithBlockContext = function (context) {
return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode);
};
Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) {
switch (node.kind) {
case 194:
case 195:
case 197:
case 141:
case 198:
return true;
}
return false;
};
Rules.IsAfterCodeBlockContext = function (context) {
switch (context.currentTokenParent.kind) {
case 194:
case 198:
case 197:
case 172:
case 206:
case 199:
case 186:
return true;
}
return false;
};
Rules.IsControlDeclContext = function (context) {
switch (context.contextNode.kind) {
case 176:
case 186:
case 179:
case 180:
case 181:
case 178:
case 189:
case 177:
case 185:
case 206:
return true;
default:
return false;
}
};
Rules.IsObjectContext = function (context) {
return context.contextNode.kind === 150;
};
Rules.IsFunctionCallContext = function (context) {
return context.contextNode.kind === 153;
};
Rules.IsNewContext = function (context) {
return context.contextNode.kind === 154;
};
Rules.IsFunctionCallOrNewContext = function (context) {
return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context);
};
Rules.IsPreviousTokenNotComma = function (context) {
return context.currentTokenSpan.kind !== 23;
};
Rules.IsSameLineTokenContext = function (context) {
return context.TokensAreOnSameLine();
};
Rules.IsNotFormatOnEnter = function (context) {
return context.formattingRequestKind != 2;
};
Rules.IsModuleDeclContext = function (context) {
return context.contextNode.kind === 198;
};
Rules.IsObjectTypeContext = function (context) {
return context.contextNode.kind === 141;
};
Rules.IsTypeArgumentOrParameter = function (token, parent) {
if (token.kind !== 24 && token.kind !== 25) {
return false;
}
switch (parent.kind) {
case 137:
case 194:
case 195:
case 193:
case 158:
case 159:
case 130:
case 129:
case 134:
case 135:
case 153:
case 154:
return true;
default:
return false;
}
};
Rules.IsTypeArgumentOrParameterContext = function (context) {
return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan, context.currentTokenParent) ||
Rules.IsTypeArgumentOrParameter(context.nextTokenSpan, context.nextTokenParent);
};
Rules.IsVoidOpContext = function (context) {
return context.currentTokenSpan.kind === 98 && context.currentTokenParent.kind === 162;
};
return Rules;
})();
formatting.Rules = Rules;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var RulesMap = (function () {
function RulesMap() {
this.map = [];
this.mapRowLength = 0;
}
RulesMap.create = function (rules) {
var result = new RulesMap();
result.Initialize(rules);
return result;
};
RulesMap.prototype.Initialize = function (rules) {
this.mapRowLength = 122 + 1;
this.map = new Array(this.mapRowLength * this.mapRowLength);
var rulesBucketConstructionStateList = new Array(this.map.length);
this.FillRules(rules, rulesBucketConstructionStateList);
return this.map;
};
RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) {
var _this = this;
rules.forEach(function (rule) {
_this.FillRule(rule, rulesBucketConstructionStateList);
});
};
RulesMap.prototype.GetRuleBucketIndex = function (row, column) {
var rulesBucketIndex = (row * this.mapRowLength) + column;
return rulesBucketIndex;
};
RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) {
var _this = this;
var specificRule = rule.Descriptor.LeftTokenRange != formatting.Shared.TokenRange.Any &&
rule.Descriptor.RightTokenRange != formatting.Shared.TokenRange.Any;
rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) {
rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) {
var rulesBucketIndex = _this.GetRuleBucketIndex(left, right);
var rulesBucket = _this.map[rulesBucketIndex];
if (rulesBucket == undefined) {
rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket();
}
rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex);
});
});
};
RulesMap.prototype.GetRule = function (context) {
var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind);
var bucket = this.map[bucketIndex];
if (bucket != null) {
for (var i = 0, len = bucket.Rules().length; i < len; i++) {
var rule = bucket.Rules()[i];
if (rule.Operation.Context.InContext(context))
return rule;
}
}
return null;
};
return RulesMap;
})();
formatting.RulesMap = RulesMap;
var MaskBitSize = 5;
var Mask = 0x1f;
(function (RulesPosition) {
RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific";
RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny";
RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific";
RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny";
RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific";
RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny";
})(formatting.RulesPosition || (formatting.RulesPosition = {}));
var RulesPosition = formatting.RulesPosition;
var RulesBucketConstructionState = (function () {
function RulesBucketConstructionState() {
this.rulesInsertionIndexBitmap = 0;
}
RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) {
var index = 0;
var pos = 0;
var indexBitmap = this.rulesInsertionIndexBitmap;
while (pos <= maskPosition) {
index += (indexBitmap & Mask);
indexBitmap >>= MaskBitSize;
pos += MaskBitSize;
}
return index;
};
RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) {
var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask;
value++;
ts.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules.");
var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition);
temp |= value << maskPosition;
this.rulesInsertionIndexBitmap = temp;
};
return RulesBucketConstructionState;
})();
formatting.RulesBucketConstructionState = RulesBucketConstructionState;
var RulesBucket = (function () {
function RulesBucket() {
this.rules = [];
}
RulesBucket.prototype.Rules = function () {
return this.rules;
};
RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) {
var position;
if (rule.Operation.Action == 1) {
position = specificTokens ? 0 : RulesPosition.IgnoreRulesAny;
}
else if (!rule.Operation.Context.IsAny()) {
position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny;
}
else {
position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny;
}
var state = constructionState[rulesBucketIndex];
if (state === undefined) {
state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState();
}
var index = state.GetInsertionIndex(position);
this.rules.splice(index, 0, rule);
state.IncreaseInsertionIndex(position);
};
return RulesBucket;
})();
formatting.RulesBucket = RulesBucket;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var Shared;
(function (Shared) {
var TokenRangeAccess = (function () {
function TokenRangeAccess(from, to, except) {
this.tokens = [];
for (var token = from; token <= to; token++) {
if (except.indexOf(token) < 0) {
this.tokens.push(token);
}
}
}
TokenRangeAccess.prototype.GetTokens = function () {
return this.tokens;
};
TokenRangeAccess.prototype.Contains = function (token) {
return this.tokens.indexOf(token) >= 0;
};
return TokenRangeAccess;
})();
Shared.TokenRangeAccess = TokenRangeAccess;
var TokenValuesAccess = (function () {
function TokenValuesAccess(tks) {
this.tokens = tks && tks.length ? tks : [];
}
TokenValuesAccess.prototype.GetTokens = function () {
return this.tokens;
};
TokenValuesAccess.prototype.Contains = function (token) {
return this.tokens.indexOf(token) >= 0;
};
return TokenValuesAccess;
})();
Shared.TokenValuesAccess = TokenValuesAccess;
var TokenSingleValueAccess = (function () {
function TokenSingleValueAccess(token) {
this.token = token;
}
TokenSingleValueAccess.prototype.GetTokens = function () {
return [this.token];
};
TokenSingleValueAccess.prototype.Contains = function (tokenValue) {
return tokenValue == this.token;
};
return TokenSingleValueAccess;
})();
Shared.TokenSingleValueAccess = TokenSingleValueAccess;
var TokenAllAccess = (function () {
function TokenAllAccess() {
}
TokenAllAccess.prototype.GetTokens = function () {
var result = [];
for (var token = 0; token <= 122; token++) {
result.push(token);
}
return result;
};
TokenAllAccess.prototype.Contains = function (tokenValue) {
return true;
};
TokenAllAccess.prototype.toString = function () {
return "[allTokens]";
};
return TokenAllAccess;
})();
Shared.TokenAllAccess = TokenAllAccess;
var TokenRange = (function () {
function TokenRange(tokenAccess) {
this.tokenAccess = tokenAccess;
}
TokenRange.FromToken = function (token) {
return new TokenRange(new TokenSingleValueAccess(token));
};
TokenRange.FromTokens = function (tokens) {
return new TokenRange(new TokenValuesAccess(tokens));
};
TokenRange.FromRange = function (f, to, except) {
if (except === void 0) { except = []; }
return new TokenRange(new TokenRangeAccess(f, to, except));
};
TokenRange.AllTokens = function () {
return new TokenRange(new TokenAllAccess());
};
TokenRange.prototype.GetTokens = function () {
return this.tokenAccess.GetTokens();
};
TokenRange.prototype.Contains = function (token) {
return this.tokenAccess.Contains(token);
};
TokenRange.prototype.toString = function () {
return this.tokenAccess.toString();
};
TokenRange.Any = TokenRange.AllTokens();
TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3]));
TokenRange.Keywords = TokenRange.FromRange(65, 122);
TokenRange.BinaryOperators = TokenRange.FromRange(24, 63);
TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([85, 86, 122]);
TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([38, 39, 47, 46]);
TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([7, 64, 16, 18, 14, 92, 87]);
TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([64, 16, 92, 87]);
TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([64, 17, 19, 87]);
TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([64, 16, 92, 87]);
TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([64, 17, 19, 87]);
TokenRange.Comments = TokenRange.FromTokens([2, 3]);
TokenRange.TypeNames = TokenRange.FromTokens([64, 117, 119, 111, 120, 98, 110]);
return TokenRange;
})();
Shared.TokenRange = TokenRange;
})(Shared = formatting.Shared || (formatting.Shared = {}));
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var RulesProvider = (function () {
function RulesProvider() {
this.globalRules = new formatting.Rules();
}
RulesProvider.prototype.getRuleName = function (rule) {
return this.globalRules.getRuleName(rule);
};
RulesProvider.prototype.getRuleByName = function (name) {
return this.globalRules[name];
};
RulesProvider.prototype.getRulesMap = function () {
return this.rulesMap;
};
RulesProvider.prototype.ensureUpToDate = function (options) {
if (this.options == null || !ts.compareDataObjects(this.options, options)) {
var activeRules = this.createActiveRules(options);
var rulesMap = formatting.RulesMap.create(activeRules);
this.activeRules = activeRules;
this.rulesMap = rulesMap;
this.options = ts.clone(options);
}
};
RulesProvider.prototype.createActiveRules = function (options) {
var rules = this.globalRules.HighPriorityCommonRules.slice(0);
if (options.InsertSpaceAfterCommaDelimiter) {
rules.push(this.globalRules.SpaceAfterComma);
}
else {
rules.push(this.globalRules.NoSpaceAfterComma);
}
if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) {
rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword);
}
else {
rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword);
}
if (options.InsertSpaceAfterKeywordsInControlFlowStatements) {
rules.push(this.globalRules.SpaceAfterKeywordInControl);
}
else {
rules.push(this.globalRules.NoSpaceAfterKeywordInControl);
}
if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) {
rules.push(this.globalRules.SpaceAfterOpenParen);
rules.push(this.globalRules.SpaceBeforeCloseParen);
rules.push(this.globalRules.NoSpaceBetweenParens);
}
else {
rules.push(this.globalRules.NoSpaceAfterOpenParen);
rules.push(this.globalRules.NoSpaceBeforeCloseParen);
rules.push(this.globalRules.NoSpaceBetweenParens);
}
if (options.InsertSpaceAfterSemicolonInForStatements) {
rules.push(this.globalRules.SpaceAfterSemicolonInFor);
}
else {
rules.push(this.globalRules.NoSpaceAfterSemicolonInFor);
}
if (options.InsertSpaceBeforeAndAfterBinaryOperators) {
rules.push(this.globalRules.SpaceBeforeBinaryOperator);
rules.push(this.globalRules.SpaceAfterBinaryOperator);
}
else {
rules.push(this.globalRules.NoSpaceBeforeBinaryOperator);
rules.push(this.globalRules.NoSpaceAfterBinaryOperator);
}
if (options.PlaceOpenBraceOnNewLineForControlBlocks) {
rules.push(this.globalRules.NewLineBeforeOpenBraceInControl);
}
if (options.PlaceOpenBraceOnNewLineForFunctions) {
rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction);
rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock);
}
rules = rules.concat(this.globalRules.LowPriorityCommonRules);
return rules;
};
return RulesProvider;
})();
formatting.RulesProvider = RulesProvider;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var Constants;
(function (Constants) {
Constants[Constants["Unknown"] = -1] = "Unknown";
})(Constants || (Constants = {}));
function formatOnEnter(position, sourceFile, rulesProvider, options) {
var line = sourceFile.getLineAndCharacterOfPosition(position).line;
if (line === 0) {
return [];
}
var span = {
pos: ts.getStartPositionOfLine(line - 1, sourceFile),
end: ts.getEndLinePosition(line, sourceFile) + 1
};
return formatSpan(span, sourceFile, options, rulesProvider, 2);
}
formatting.formatOnEnter = formatOnEnter;
function formatOnSemicolon(position, sourceFile, rulesProvider, options) {
return formatOutermostParent(position, 22, sourceFile, options, rulesProvider, 3);
}
formatting.formatOnSemicolon = formatOnSemicolon;
function formatOnClosingCurly(position, sourceFile, rulesProvider, options) {
return formatOutermostParent(position, 15, sourceFile, options, rulesProvider, 4);
}
formatting.formatOnClosingCurly = formatOnClosingCurly;
function formatDocument(sourceFile, rulesProvider, options) {
var span = {
pos: 0,
end: sourceFile.text.length
};
return formatSpan(span, sourceFile, options, rulesProvider, 0);
}
formatting.formatDocument = formatDocument;
function formatSelection(start, end, sourceFile, rulesProvider, options) {
var span = {
pos: ts.getLineStartPositionForPosition(start, sourceFile),
end: end
};
return formatSpan(span, sourceFile, options, rulesProvider, 1);
}
formatting.formatSelection = formatSelection;
function formatOutermostParent(position, expectedLastToken, sourceFile, options, rulesProvider, requestKind) {
var parent = findOutermostParent(position, expectedLastToken, sourceFile);
if (!parent) {
return [];
}
var span = {
pos: ts.getLineStartPositionForPosition(parent.getStart(sourceFile), sourceFile),
end: parent.end
};
return formatSpan(span, sourceFile, options, rulesProvider, requestKind);
}
function findOutermostParent(position, expectedTokenKind, sourceFile) {
var precedingToken = ts.findPrecedingToken(position, sourceFile);
if (!precedingToken ||
precedingToken.kind !== expectedTokenKind ||
position !== precedingToken.getEnd()) {
return undefined;
}
var current = precedingToken;
while (current &&
current.parent &&
current.parent.end === precedingToken.end &&
!isListElement(current.parent, current)) {
current = current.parent;
}
return current;
}
function isListElement(parent, node) {
switch (parent.kind) {
case 194:
case 195:
return ts.rangeContainsRange(parent.members, node);
case 198:
var body = parent.body;
return body && body.kind === 172 && ts.rangeContainsRange(body.statements, node);
case 210:
case 172:
case 199:
return ts.rangeContainsRange(parent.statements, node);
case 206:
return ts.rangeContainsRange(parent.block.statements, node);
}
return false;
}
function findEnclosingNode(range, sourceFile) {
return find(sourceFile);
function find(n) {
var candidate = ts.forEachChild(n, function (c) { return ts.startEndContainsRange(c.getStart(sourceFile), c.end, range) && c; });
if (candidate) {
var result = find(candidate);
if (result) {
return result;
}
}
return n;
}
}
function prepareRangeContainsErrorFunction(errors, originalRange) {
if (!errors.length) {
return rangeHasNoErrors;
}
var sorted = errors.filter(function (d) { return ts.rangeOverlapsWithStartEnd(originalRange, d.start, d.start + d.length); }).sort(function (e1, e2) { return e1.start - e2.start; });
if (!sorted.length) {
return rangeHasNoErrors;
}
var index = 0;
return function (r) {
while (true) {
if (index >= sorted.length) {
return false;
}
var error = sorted[index];
if (r.end <= error.start) {
return false;
}
if (ts.startEndOverlapsWithStartEnd(r.pos, r.end, error.start, error.start + error.length)) {
return true;
}
index++;
}
};
function rangeHasNoErrors(r) {
return false;
}
}
function getScanStartPosition(enclosingNode, originalRange, sourceFile) {
var start = enclosingNode.getStart(sourceFile);
if (start === originalRange.pos && enclosingNode.end === originalRange.end) {
return start;
}
var precedingToken = ts.findPrecedingToken(originalRange.pos, sourceFile);
if (!precedingToken) {
return enclosingNode.pos;
}
if (precedingToken.end >= originalRange.pos) {
return enclosingNode.pos;
}
return precedingToken.end;
}
function getOwnOrInheritedDelta(n, options, sourceFile) {
var previousLine = -1;
var childKind = 0;
while (n) {
var line = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)).line;
if (previousLine !== -1 && line !== previousLine) {
break;
}
if (formatting.SmartIndenter.shouldIndentChildNode(n.kind, childKind)) {
return options.IndentSize;
}
previousLine = line;
childKind = n.kind;
n = n.parent;
}
return 0;
}
function formatSpan(originalRange, sourceFile, options, rulesProvider, requestKind) {
var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.parseDiagnostics, originalRange);
var formattingContext = new formatting.FormattingContext(sourceFile, requestKind);
var enclosingNode = findEnclosingNode(originalRange, sourceFile);
var formattingScanner = formatting.getFormattingScanner(sourceFile, getScanStartPosition(enclosingNode, originalRange, sourceFile), originalRange.end);
var initialIndentation = formatting.SmartIndenter.getIndentationForNode(enclosingNode, originalRange, sourceFile, options);
var previousRangeHasError;
var previousRange;
var previousParent;
var previousRangeStartLine;
var edits = [];
formattingScanner.advance();
if (formattingScanner.isOnToken()) {
var startLine = sourceFile.getLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line;
var delta = getOwnOrInheritedDelta(enclosingNode, options, sourceFile);
processNode(enclosingNode, enclosingNode, startLine, initialIndentation, delta);
}
formattingScanner.close();
return edits;
function tryComputeIndentationForListItem(startPos, endPos, parentStartLine, range, inheritedIndentation) {
if (ts.rangeOverlapsWithStartEnd(range, startPos, endPos)) {
if (inheritedIndentation !== -1) {
return inheritedIndentation;
}
}
else {
var startLine = sourceFile.getLineAndCharacterOfPosition(startPos).line;
var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile);
var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options);
if (startLine !== parentStartLine || startPos === column) {
return column;
}
}
return -1;
}
function computeIndentation(node, startLine, inheritedIndentation, parent, parentDynamicIndentation, effectiveParentStartLine) {
var indentation = inheritedIndentation;
if (indentation === -1) {
if (isSomeBlock(node.kind)) {
if (isSomeBlock(parent.kind) ||
parent.kind === 210 ||
parent.kind === 203 ||
parent.kind === 204) {
indentation = parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta();
}
else {
indentation = parentDynamicIndentation.getIndentation();
}
}
else {
if (formatting.SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(parent, node, startLine, sourceFile)) {
indentation = parentDynamicIndentation.getIndentation();
}
else {
indentation = parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta();
}
}
}
var delta = formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0) ? options.IndentSize : 0;
if (effectiveParentStartLine === startLine) {
indentation = parentDynamicIndentation.getIndentation();
delta = Math.min(options.IndentSize, parentDynamicIndentation.getDelta() + delta);
}
return {
indentation: indentation,
delta: delta
};
}
function getDynamicIndentation(node, nodeStartLine, indentation, delta) {
return {
getIndentationForComment: function (kind) {
switch (kind) {
case 15:
case 19:
return indentation + delta;
}
return indentation;
},
getIndentationForToken: function (line, kind) {
switch (kind) {
case 14:
case 15:
case 18:
case 19:
case 75:
case 99:
return indentation;
default:
return nodeStartLine !== line ? indentation + delta : indentation;
}
},
getIndentation: function () { return indentation; },
getDelta: function () { return delta; },
recomputeIndentation: function (lineAdded) {
if (node.parent && formatting.SmartIndenter.shouldIndentChildNode(node.parent.kind, node.kind)) {
if (lineAdded) {
indentation += options.IndentSize;
}
else {
indentation -= options.IndentSize;
}
if (formatting.SmartIndenter.shouldIndentChildNode(node.kind, 0)) {
delta = options.IndentSize;
}
else {
delta = 0;
}
}
}
};
}
function processNode(node, contextNode, nodeStartLine, indentation, delta) {
if (!ts.rangeOverlapsWithStartEnd(originalRange, node.getStart(sourceFile), node.getEnd())) {
return;
}
var nodeDynamicIndentation = getDynamicIndentation(node, nodeStartLine, indentation, delta);
var childContextNode = contextNode;
ts.forEachChild(node, function (child) {
processChildNode(child, -1, node, nodeDynamicIndentation, nodeStartLine, false);
}, function (nodes) {
processChildNodes(nodes, node, nodeStartLine, nodeDynamicIndentation);
});
while (formattingScanner.isOnToken()) {
var tokenInfo = formattingScanner.readTokenInfo(node);
if (tokenInfo.token.end > node.end) {
break;
}
consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation);
}
function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, isListItem) {
var childStartPos = child.getStart(sourceFile);
var childStart = sourceFile.getLineAndCharacterOfPosition(childStartPos);
var childIndentationAmount = -1;
if (isListItem) {
childIndentationAmount = tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation);
if (childIndentationAmount !== -1) {
inheritedIndentation = childIndentationAmount;
}
}
if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) {
return inheritedIndentation;
}
if (child.getFullWidth() === 0) {
return inheritedIndentation;
}
while (formattingScanner.isOnToken()) {
var tokenInfo = formattingScanner.readTokenInfo(node);
if (tokenInfo.token.end > childStartPos) {
break;
}
consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation);
}
if (!formattingScanner.isOnToken()) {
return inheritedIndentation;
}
if (ts.isToken(child)) {
var tokenInfo = formattingScanner.readTokenInfo(child);
ts.Debug.assert(tokenInfo.token.end === child.end);
consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation);
return inheritedIndentation;
}
var childIndentation = computeIndentation(child, childStart.line, childIndentationAmount, node, parentDynamicIndentation, parentStartLine);
processNode(child, childContextNode, childStart.line, childIndentation.indentation, childIndentation.delta);
childContextNode = node;
return inheritedIndentation;
}
function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) {
var listStartToken = getOpenTokenForList(parent, nodes);
var listEndToken = getCloseTokenForOpenToken(listStartToken);
var listDynamicIndentation = parentDynamicIndentation;
var startLine = parentStartLine;
if (listStartToken !== 0) {
while (formattingScanner.isOnToken()) {
var tokenInfo = formattingScanner.readTokenInfo(parent);
if (tokenInfo.token.end > nodes.pos) {
break;
}
else if (tokenInfo.token.kind === listStartToken) {
startLine = sourceFile.getLineAndCharacterOfPosition(tokenInfo.token.pos).line;
var indentation = computeIndentation(tokenInfo.token, startLine, -1, parent, parentDynamicIndentation, startLine);
listDynamicIndentation = getDynamicIndentation(parent, parentStartLine, indentation.indentation, indentation.delta);
consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation);
}
else {
consumeTokenAndAdvanceScanner(tokenInfo, parent, parentDynamicIndentation);
}
}
}
var inheritedIndentation = -1;
for (var i = 0, len = nodes.length; i < len; ++i) {
inheritedIndentation = processChildNode(nodes[i], inheritedIndentation, node, listDynamicIndentation, startLine, true);
}
if (listEndToken !== 0) {
if (formattingScanner.isOnToken()) {
var tokenInfo = formattingScanner.readTokenInfo(parent);
if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) {
consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation);
}
}
}
}
function consumeTokenAndAdvanceScanner(currentTokenInfo, parent, dynamicIndentation) {
ts.Debug.assert(ts.rangeContainsRange(parent, currentTokenInfo.token));
var lastTriviaWasNewLine = formattingScanner.lastTrailingTriviaWasNewLine();
var indentToken = false;
if (currentTokenInfo.leadingTrivia) {
processTrivia(currentTokenInfo.leadingTrivia, parent, childContextNode, dynamicIndentation);
}
var lineAdded;
var isTokenInRange = ts.rangeContainsRange(originalRange, currentTokenInfo.token);
var tokenStart = sourceFile.getLineAndCharacterOfPosition(currentTokenInfo.token.pos);
if (isTokenInRange) {
var rangeHasError = rangeContainsError(currentTokenInfo.token);
var prevStartLine = previousRangeStartLine;
lineAdded = processRange(currentTokenInfo.token, tokenStart, parent, childContextNode, dynamicIndentation);
if (rangeHasError) {
indentToken = false;
}
else {
if (lineAdded !== undefined) {
indentToken = lineAdded;
}
else {
indentToken = lastTriviaWasNewLine && tokenStart.line !== prevStartLine;
}
}
}
if (currentTokenInfo.trailingTrivia) {
processTrivia(currentTokenInfo.trailingTrivia, parent, childContextNode, dynamicIndentation);
}
if (indentToken) {
var indentNextTokenOrTrivia = true;
if (currentTokenInfo.leadingTrivia) {
for (var i = 0, len = currentTokenInfo.leadingTrivia.length; i < len; ++i) {
var triviaItem = currentTokenInfo.leadingTrivia[i];
if (!ts.rangeContainsRange(originalRange, triviaItem)) {
continue;
}
var triviaStartLine = sourceFile.getLineAndCharacterOfPosition(triviaItem.pos).line;
switch (triviaItem.kind) {
case 3:
var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind);
indentMultilineComment(triviaItem, commentIndentation, !indentNextTokenOrTrivia);
indentNextTokenOrTrivia = false;
break;
case 2:
if (indentNextTokenOrTrivia) {
var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind);
insertIndentation(triviaItem.pos, commentIndentation, false);
indentNextTokenOrTrivia = false;
}
break;
case 4:
indentNextTokenOrTrivia = true;
break;
}
}
}
if (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) {
var tokenIndentation = dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind);
insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded);
}
}
formattingScanner.advance();
childContextNode = parent;
}
}
function processTrivia(trivia, parent, contextNode, dynamicIndentation) {
for (var i = 0, len = trivia.length; i < len; ++i) {
var triviaItem = trivia[i];
if (ts.isComment(triviaItem.kind) && ts.rangeContainsRange(originalRange, triviaItem)) {
var triviaItemStart = sourceFile.getLineAndCharacterOfPosition(triviaItem.pos);
processRange(triviaItem, triviaItemStart, parent, contextNode, dynamicIndentation);
}
}
}
function processRange(range, rangeStart, parent, contextNode, dynamicIndentation) {
var rangeHasError = rangeContainsError(range);
var lineAdded;
if (!rangeHasError && !previousRangeHasError) {
if (!previousRange) {
var originalStart = sourceFile.getLineAndCharacterOfPosition(originalRange.pos);
trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line);
}
else {
lineAdded =
processPair(range, rangeStart.line, parent, previousRange, previousRangeStartLine, previousParent, contextNode, dynamicIndentation);
}
}
previousRange = range;
previousParent = parent;
previousRangeStartLine = rangeStart.line;
previousRangeHasError = rangeHasError;
return lineAdded;
}
function processPair(currentItem, currentStartLine, currentParent, previousItem, previousStartLine, previousParent, contextNode, dynamicIndentation) {
formattingContext.updateContext(previousItem, previousParent, currentItem, currentParent, contextNode);
var rule = rulesProvider.getRulesMap().GetRule(formattingContext);
var trimTrailingWhitespaces;
var lineAdded;
if (rule) {
applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine);
if (rule.Operation.Action & (2 | 8) && currentStartLine !== previousStartLine) {
lineAdded = false;
if (currentParent.getStart(sourceFile) === currentItem.pos) {
dynamicIndentation.recomputeIndentation(false);
}
}
else if (rule.Operation.Action & 4 && currentStartLine === previousStartLine) {
lineAdded = true;
if (currentParent.getStart(sourceFile) === currentItem.pos) {
dynamicIndentation.recomputeIndentation(true);
}
}
trimTrailingWhitespaces =
(rule.Operation.Action & (4 | 2)) &&
rule.Flag !== 1;
}
else {
trimTrailingWhitespaces = true;
}
if (currentStartLine !== previousStartLine && trimTrailingWhitespaces) {
trimTrailingWhitespacesForLines(previousStartLine, currentStartLine, previousItem);
}
return lineAdded;
}
function insertIndentation(pos, indentation, lineAdded) {
var indentationString = getIndentationString(indentation, options);
if (lineAdded) {
recordReplace(pos, 0, indentationString);
}
else {
var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos);
if (indentation !== tokenStart.character) {
var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile);
recordReplace(startLinePosition, tokenStart.character, indentationString);
}
}
}
function indentMultilineComment(commentRange, indentation, firstLineIsIndented) {
var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line;
var endLine = sourceFile.getLineAndCharacterOfPosition(commentRange.end).line;
if (startLine === endLine) {
if (!firstLineIsIndented) {
insertIndentation(commentRange.pos, indentation, false);
}
return;
}
else {
var parts = [];
var startPos = commentRange.pos;
for (var line = startLine; line < endLine; ++line) {
var endOfLine = ts.getEndLinePosition(line, sourceFile);
parts.push({ pos: startPos, end: endOfLine });
startPos = ts.getStartPositionOfLine(line + 1, sourceFile);
}
parts.push({ pos: startPos, end: commentRange.end });
}
var startLinePos = ts.getStartPositionOfLine(startLine, sourceFile);
var nonWhitespaceColumnInFirstPart = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePos, parts[0].pos, sourceFile, options);
if (indentation === nonWhitespaceColumnInFirstPart) {
return;
}
var startIndex = 0;
if (firstLineIsIndented) {
startIndex = 1;
startLine++;
}
var delta = indentation - nonWhitespaceColumnInFirstPart;
for (var i = startIndex, len = parts.length; i < len; ++i, ++startLine) {
var startLinePos = ts.getStartPositionOfLine(startLine, sourceFile);
var nonWhitespaceColumn = i === 0 ? nonWhitespaceColumnInFirstPart : formatting.SmartIndenter.findFirstNonWhitespaceColumn(parts[i].pos, parts[i].end, sourceFile, options);
var newIndentation = nonWhitespaceColumn + delta;
if (newIndentation > 0) {
var indentationString = getIndentationString(newIndentation, options);
recordReplace(startLinePos, nonWhitespaceColumn, indentationString);
}
else {
recordDelete(startLinePos, nonWhitespaceColumn);
}
}
}
function trimTrailingWhitespacesForLines(line1, line2, range) {
for (var line = line1; line < line2; ++line) {
var lineStartPosition = ts.getStartPositionOfLine(line, sourceFile);
var lineEndPosition = ts.getEndLinePosition(line, sourceFile);
if (range && ts.isComment(range.kind) && range.pos <= lineEndPosition && range.end > lineEndPosition) {
continue;
}
var pos = lineEndPosition;
while (pos >= lineStartPosition && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) {
pos--;
}
if (pos !== lineEndPosition) {
ts.Debug.assert(pos === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(pos)));
recordDelete(pos + 1, lineEndPosition - pos);
}
}
}
function newTextChange(start, len, newText) {
return { span: ts.createTextSpan(start, len), newText: newText };
}
function recordDelete(start, len) {
if (len) {
edits.push(newTextChange(start, len, ""));
}
}
function recordReplace(start, len, newText) {
if (len || newText) {
edits.push(newTextChange(start, len, newText));
}
}
function applyRuleEdits(rule, previousRange, previousStartLine, currentRange, currentStartLine) {
var between;
switch (rule.Operation.Action) {
case 1:
return;
case 8:
if (previousRange.end !== currentRange.pos) {
recordDelete(previousRange.end, currentRange.pos - previousRange.end);
}
break;
case 4:
if (rule.Flag !== 1 && previousStartLine !== currentStartLine) {
return;
}
var lineDelta = currentStartLine - previousStartLine;
if (lineDelta !== 1) {
recordReplace(previousRange.end, currentRange.pos - previousRange.end, options.NewLineCharacter);
}
break;
case 2:
if (rule.Flag !== 1 && previousStartLine !== currentStartLine) {
return;
}
var posDelta = currentRange.pos - previousRange.end;
if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange.end) !== 32) {
recordReplace(previousRange.end, currentRange.pos - previousRange.end, " ");
}
break;
}
}
}
function isSomeBlock(kind) {
switch (kind) {
case 172:
case 199:
return true;
}
return false;
}
function getOpenTokenForList(node, list) {
switch (node.kind) {
case 131:
case 193:
case 158:
case 130:
case 129:
case 159:
if (node.typeParameters === list) {
return 24;
}
else if (node.parameters === list) {
return 16;
}
break;
case 153:
case 154:
if (node.typeArguments === list) {
return 24;
}
else if (node.arguments === list) {
return 16;
}
break;
case 137:
if (node.typeArguments === list) {
return 24;
}
}
return 0;
}
function getCloseTokenForOpenToken(kind) {
switch (kind) {
case 16:
return 17;
case 24:
return 25;
}
return 0;
}
var internedTabsIndentation;
var internedSpacesIndentation;
function getIndentationString(indentation, options) {
if (!options.ConvertTabsToSpaces) {
var tabs = Math.floor(indentation / options.TabSize);
var spaces = indentation - tabs * options.TabSize;
var tabString;
if (!internedTabsIndentation) {
internedTabsIndentation = [];
}
if (internedTabsIndentation[tabs] === undefined) {
internedTabsIndentation[tabs] = tabString = repeat('\t', tabs);
}
else {
tabString = internedTabsIndentation[tabs];
}
return spaces ? tabString + repeat(" ", spaces) : tabString;
}
else {
var spacesString;
var quotient = Math.floor(indentation / options.IndentSize);
var remainder = indentation % options.IndentSize;
if (!internedSpacesIndentation) {
internedSpacesIndentation = [];
}
if (internedSpacesIndentation[quotient] === undefined) {
spacesString = repeat(" ", options.IndentSize * quotient);
internedSpacesIndentation[quotient] = spacesString;
}
else {
spacesString = internedSpacesIndentation[quotient];
}
return remainder ? spacesString + repeat(" ", remainder) : spacesString;
}
function repeat(value, count) {
var s = "";
for (var i = 0; i < count; ++i) {
s += value;
}
return s;
}
}
formatting.getIndentationString = getIndentationString;
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
var formatting;
(function (formatting) {
var SmartIndenter;
(function (SmartIndenter) {
function getIndentation(position, sourceFile, options) {
if (position > sourceFile.text.length) {
return 0;
}
var precedingToken = ts.findPrecedingToken(position, sourceFile);
if (!precedingToken) {
return 0;
}
var precedingTokenIsLiteral = precedingToken.kind === 8 ||
precedingToken.kind === 9 ||
precedingToken.kind === 10 ||
precedingToken.kind === 11 ||
precedingToken.kind === 12 ||
precedingToken.kind === 13;
if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) {
return 0;
}
var lineAtPosition = sourceFile.getLineAndCharacterOfPosition(position).line;
if (precedingToken.kind === 23 && precedingToken.parent.kind !== 165) {
var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation;
}
}
var previous;
var current = precedingToken;
var currentStart;
var indentationDelta;
while (current) {
if (positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode(current.kind, previous ? previous.kind : 0)) {
currentStart = getStartLineAndCharacterForNode(current, sourceFile);
if (nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile)) {
indentationDelta = 0;
}
else {
indentationDelta = lineAtPosition !== currentStart.line ? options.IndentSize : 0;
}
break;
}
var actualIndentation = getActualIndentationForListItem(current, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation;
}
previous = current;
current = current.parent;
}
if (!current) {
return 0;
}
return getIndentationForNodeWorker(current, currentStart, undefined, indentationDelta, sourceFile, options);
}
SmartIndenter.getIndentation = getIndentation;
function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) {
var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile));
return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, 0, sourceFile, options);
}
SmartIndenter.getIndentationForNode = getIndentationForNode;
function getIndentationForNodeWorker(current, currentStart, ignoreActualIndentationRange, indentationDelta, sourceFile, options) {
var parent = current.parent;
var parentStart;
while (parent) {
var useActualIndentation = true;
if (ignoreActualIndentationRange) {
var start = current.getStart(sourceFile);
useActualIndentation = start < ignoreActualIndentationRange.pos || start > ignoreActualIndentationRange.end;
}
if (useActualIndentation) {
var actualIndentation = getActualIndentationForListItem(current, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation + indentationDelta;
}
}
parentStart = getParentStart(parent, current, sourceFile);
var parentAndChildShareLine = parentStart.line === currentStart.line ||
childStartsOnTheSameLineWithElseInIfStatement(parent, current, currentStart.line, sourceFile);
if (useActualIndentation) {
var actualIndentation = getActualIndentationForNode(current, parent, currentStart, parentAndChildShareLine, sourceFile, options);
if (actualIndentation !== -1) {
return actualIndentation + indentationDelta;
}
}
if (shouldIndentChildNode(parent.kind, current.kind) && !parentAndChildShareLine) {
indentationDelta += options.IndentSize;
}
current = parent;
currentStart = parentStart;
parent = current.parent;
}
return indentationDelta;
}
function getParentStart(parent, child, sourceFile) {
var containingList = getContainingList(child, sourceFile);
if (containingList) {
return sourceFile.getLineAndCharacterOfPosition(containingList.pos);
}
return sourceFile.getLineAndCharacterOfPosition(parent.getStart(sourceFile));
}
function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) {
var commaItemInfo = ts.findListItemInfo(commaToken);
ts.Debug.assert(commaItemInfo && commaItemInfo.listItemIndex > 0);
return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options);
}
function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) {
var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) &&
(parent.kind === 210 || !parentAndChildShareLine);
if (!useActualIndentation) {
return -1;
}
return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options);
}
function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) {
var nextToken = ts.findNextToken(precedingToken, current);
if (!nextToken) {
return false;
}
if (nextToken.kind === 14) {
return true;
}
else if (nextToken.kind === 15) {
var nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line;
return lineAtPosition === nextTokenStartLine;
}
return false;
}
function getStartLineAndCharacterForNode(n, sourceFile) {
return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile));
}
function positionBelongsToNode(candidate, position, sourceFile) {
return candidate.end > position || !isCompletedNode(candidate, sourceFile);
}
function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
if (parent.kind === 176 && parent.elseStatement === child) {
var elseKeyword = ts.findChildOfKind(parent, 75, sourceFile);
ts.Debug.assert(elseKeyword !== undefined);
var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
return elseKeywordStartLine === childStartLine;
}
return false;
}
SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement = childStartsOnTheSameLineWithElseInIfStatement;
function getContainingList(node, sourceFile) {
if (node.parent) {
switch (node.parent.kind) {
case 137:
if (node.parent.typeArguments &&
ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) {
return node.parent.typeArguments;
}
break;
case 150:
return node.parent.properties;
case 149:
return node.parent.elements;
case 193:
case 158:
case 159:
case 130:
case 129:
case 134:
case 135:
var start = node.getStart(sourceFile);
if (node.parent.typeParameters &&
ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) {
return node.parent.typeParameters;
}
if (ts.rangeContainsStartEnd(node.parent.parameters, start, node.getEnd())) {
return node.parent.parameters;
}
break;
case 154:
case 153:
var start = node.getStart(sourceFile);
if (node.parent.typeArguments &&
ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) {
return node.parent.typeArguments;
}
if (node.parent.arguments &&
ts.rangeContainsStartEnd(node.parent.arguments, start, node.getEnd())) {
return node.parent.arguments;
}
break;
}
}
return undefined;
}
function getActualIndentationForListItem(node, sourceFile, options) {
var containingList = getContainingList(node, sourceFile);
return containingList ? getActualIndentationFromList(containingList) : -1;
function getActualIndentationFromList(list) {
var index = ts.indexOf(list, node);
return index !== -1 ? deriveActualIndentationFromList(list, index, sourceFile, options) : -1;
}
}
function deriveActualIndentationFromList(list, index, sourceFile, options) {
ts.Debug.assert(index >= 0 && index < list.length);
var node = list[index];
var lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile);
for (var i = index - 1; i >= 0; --i) {
if (list[i].kind === 23) {
continue;
}
var prevEndLine = sourceFile.getLineAndCharacterOfPosition(list[i].end).line;
if (prevEndLine !== lineAndCharacter.line) {
return findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options);
}
lineAndCharacter = getStartLineAndCharacterForNode(list[i], sourceFile);
}
return -1;
}
function findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options) {
var lineStart = sourceFile.getPositionOfLineAndCharacter(lineAndCharacter.line, 0);
return findFirstNonWhitespaceColumn(lineStart, lineStart + lineAndCharacter.character, sourceFile, options);
}
function findFirstNonWhitespaceColumn(startPos, endPos, sourceFile, options) {
var column = 0;
for (var pos = startPos; pos < endPos; ++pos) {
var ch = sourceFile.text.charCodeAt(pos);
if (!ts.isWhiteSpace(ch)) {
return column;
}
if (ch === 9) {
column += options.TabSize + (column % options.TabSize);
}
else {
column++;
}
}
return column;
}
SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn;
function nodeContentIsAlwaysIndented(kind) {
switch (kind) {
case 194:
case 195:
case 197:
case 149:
case 172:
case 199:
case 150:
case 141:
case 186:
case 204:
case 203:
case 157:
case 153:
case 154:
case 173:
case 191:
case 201:
case 184:
case 166:
return true;
}
return false;
}
function shouldIndentChildNode(parent, child) {
if (nodeContentIsAlwaysIndented(parent)) {
return true;
}
switch (parent) {
case 177:
case 178:
case 180:
case 181:
case 179:
case 176:
case 193:
case 158:
case 130:
case 129:
case 159:
case 131:
case 132:
case 133:
return child !== 172;
default:
return false;
}
}
SmartIndenter.shouldIndentChildNode = shouldIndentChildNode;
function nodeEndsWith(n, expectedLastToken, sourceFile) {
var children = n.getChildren(sourceFile);
if (children.length) {
var last = children[children.length - 1];
if (last.kind === expectedLastToken) {
return true;
}
else if (last.kind === 22 && children.length !== 1) {
return children[children.length - 2].kind === expectedLastToken;
}
}
return false;
}
function isCompletedNode(n, sourceFile) {
if (n.getFullWidth() === 0) {
return false;
}
switch (n.kind) {
case 194:
case 195:
case 197:
case 150:
case 172:
case 199:
case 186:
return nodeEndsWith(n, 15, sourceFile);
case 206:
return isCompletedNode(n.block, sourceFile);
case 157:
case 134:
case 153:
case 135:
return nodeEndsWith(n, 17, sourceFile);
case 193:
case 158:
case 130:
case 129:
case 159:
return !n.body || isCompletedNode(n.body, sourceFile);
case 198:
return n.body && isCompletedNode(n.body, sourceFile);
case 176:
if (n.elseStatement) {
return isCompletedNode(n.elseStatement, sourceFile);
}
return isCompletedNode(n.thenStatement, sourceFile);
case 175:
return isCompletedNode(n.expression, sourceFile);
case 149:
return nodeEndsWith(n, 19, sourceFile);
case 203:
case 204:
return false;
case 178:
return isCompletedNode(n.statement, sourceFile);
case 177:
var hasWhileKeyword = ts.findChildOfKind(n, 99, sourceFile);
if (hasWhileKeyword) {
return nodeEndsWith(n, 17, sourceFile);
}
return isCompletedNode(n.statement, sourceFile);
default:
return true;
}
}
})(SmartIndenter = formatting.SmartIndenter || (formatting.SmartIndenter = {}));
})(formatting = ts.formatting || (ts.formatting = {}));
})(ts || (ts = {}));
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var ts;
(function (ts) {
ts.servicesVersion = "0.4";
var ScriptSnapshot;
(function (ScriptSnapshot) {
var StringScriptSnapshot = (function () {
function StringScriptSnapshot(text) {
this.text = text;
this._lineStartPositions = undefined;
}
StringScriptSnapshot.prototype.getText = function (start, end) {
return this.text.substring(start, end);
};
StringScriptSnapshot.prototype.getLength = function () {
return this.text.length;
};
StringScriptSnapshot.prototype.getChangeRange = function (oldSnapshot) {
return undefined;
};
return StringScriptSnapshot;
})();
function fromString(text) {
return new StringScriptSnapshot(text);
}
ScriptSnapshot.fromString = fromString;
})(ScriptSnapshot = ts.ScriptSnapshot || (ts.ScriptSnapshot = {}));
var scanner = ts.createScanner(2, true);
var emptyArray = [];
function createNode(kind, pos, end, flags, parent) {
var node = new (ts.getNodeConstructor(kind))();
node.pos = pos;
node.end = end;
node.flags = flags;
node.parent = parent;
return node;
}
var NodeObject = (function () {
function NodeObject() {
}
NodeObject.prototype.getSourceFile = function () {
return ts.getSourceFileOfNode(this);
};
NodeObject.prototype.getStart = function (sourceFile) {
return ts.getTokenPosOfNode(this, sourceFile);
};
NodeObject.prototype.getFullStart = function () {
return this.pos;
};
NodeObject.prototype.getEnd = function () {
return this.end;
};
NodeObject.prototype.getWidth = function (sourceFile) {
return this.getEnd() - this.getStart(sourceFile);
};
NodeObject.prototype.getFullWidth = function () {
return this.end - this.getFullStart();
};
NodeObject.prototype.getLeadingTriviaWidth = function (sourceFile) {
return this.getStart(sourceFile) - this.pos;
};
NodeObject.prototype.getFullText = function (sourceFile) {
return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end);
};
NodeObject.prototype.getText = function (sourceFile) {
return (sourceFile || this.getSourceFile()).text.substring(this.getStart(), this.getEnd());
};
NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) {
scanner.setTextPos(pos);
while (pos < end) {
var token = scanner.scan();
var textPos = scanner.getTextPos();
nodes.push(createNode(token, pos, textPos, 512, this));
pos = textPos;
}
return pos;
};
NodeObject.prototype.createSyntaxList = function (nodes) {
var list = createNode(211, nodes.pos, nodes.end, 512, this);
list._children = [];
var pos = nodes.pos;
for (var i = 0, len = nodes.length; i < len; i++) {
var node = nodes[i];
if (pos < node.pos) {
pos = this.addSyntheticNodes(list._children, pos, node.pos);
}
list._children.push(node);
pos = node.end;
}
if (pos < nodes.end) {
this.addSyntheticNodes(list._children, pos, nodes.end);
}
return list;
};
NodeObject.prototype.createChildren = function (sourceFile) {
var _this = this;
if (this.kind >= 123) {
scanner.setText((sourceFile || this.getSourceFile()).text);
var children = [];
var pos = this.pos;
var processNode = function (node) {
if (pos < node.pos) {
pos = _this.addSyntheticNodes(children, pos, node.pos);
}
children.push(node);
pos = node.end;
};
var processNodes = function (nodes) {
if (pos < nodes.pos) {
pos = _this.addSyntheticNodes(children, pos, nodes.pos);
}
children.push(_this.createSyntaxList(nodes));
pos = nodes.end;
};
ts.forEachChild(this, processNode, processNodes);
if (pos < this.end) {
this.addSyntheticNodes(children, pos, this.end);
}
scanner.setText(undefined);
}
this._children = children || emptyArray;
};
NodeObject.prototype.getChildCount = function (sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children.length;
};
NodeObject.prototype.getChildAt = function (index, sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children[index];
};
NodeObject.prototype.getChildren = function (sourceFile) {
if (!this._children)
this.createChildren(sourceFile);
return this._children;
};
NodeObject.prototype.getFirstToken = function (sourceFile) {
var children = this.getChildren();
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.kind < 123) {
return child;
}
return child.getFirstToken(sourceFile);
}
};
NodeObject.prototype.getLastToken = function (sourceFile) {
var children = this.getChildren(sourceFile);
for (var i = children.length - 1; i >= 0; i--) {
var child = children[i];
if (child.kind < 123) {
return child;
}
return child.getLastToken(sourceFile);
}
};
return NodeObject;
})();
var SymbolObject = (function () {
function SymbolObject(flags, name) {
this.flags = flags;
this.name = name;
}
SymbolObject.prototype.getFlags = function () {
return this.flags;
};
SymbolObject.prototype.getName = function () {
return this.name;
};
SymbolObject.prototype.getDeclarations = function () {
return this.declarations;
};
SymbolObject.prototype.getDocumentationComment = function () {
if (this.documentationComment === undefined) {
this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 4));
}
return this.documentationComment;
};
return SymbolObject;
})();
function getJsDocCommentsFromDeclarations(declarations, name, canUseParsedParamTagComments) {
var documentationComment = [];
var docComments = getJsDocCommentsSeparatedByNewLines();
ts.forEach(docComments, function (docComment) {
if (documentationComment.length) {
documentationComment.push(ts.lineBreakPart());
}
documentationComment.push(docComment);
});
return documentationComment;
function getJsDocCommentsSeparatedByNewLines() {
var paramTag = "@param";
var jsDocCommentParts = [];
ts.forEach(declarations, function (declaration, indexOfDeclaration) {
if (ts.indexOf(declarations, declaration) === indexOfDeclaration) {
var sourceFileOfDeclaration = ts.getSourceFileOfNode(declaration);
if (canUseParsedParamTagComments && declaration.kind === 126) {
ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration), function (jsDocCommentTextRange) {
var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration);
if (cleanedParamJsDocComment) {
jsDocCommentParts.push.apply(jsDocCommentParts, cleanedParamJsDocComment);
}
});
}
if (declaration.kind === 198 && declaration.body.kind === 198) {
return;
}
while (declaration.kind === 198 && declaration.parent.kind === 198) {
declaration = declaration.parent;
}
ts.forEach(getJsDocCommentTextRange(declaration.kind === 191 ? declaration.parent.parent : declaration, sourceFileOfDeclaration), function (jsDocCommentTextRange) {
var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration);
if (cleanedJsDocComment) {
jsDocCommentParts.push.apply(jsDocCommentParts, cleanedJsDocComment);
}
});
}
});
return jsDocCommentParts;
function getJsDocCommentTextRange(node, sourceFile) {
return ts.map(ts.getJsDocComments(node, sourceFile), function (jsDocComment) {
return {
pos: jsDocComment.pos + "/*".length,
end: jsDocComment.end - "*/".length
};
});
}
function consumeWhiteSpacesOnTheLine(pos, end, sourceFile, maxSpacesToRemove) {
if (maxSpacesToRemove !== undefined) {
end = Math.min(end, pos + maxSpacesToRemove);
}
for (; pos < end; pos++) {
var ch = sourceFile.text.charCodeAt(pos);
if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) {
return pos;
}
}
return end;
}
function consumeLineBreaks(pos, end, sourceFile) {
while (pos < end && ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
pos++;
}
return pos;
}
function isName(pos, end, sourceFile, name) {
return pos + name.length < end &&
sourceFile.text.substr(pos, name.length) === name &&
(ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)) ||
ts.isLineBreak(sourceFile.text.charCodeAt(pos + name.length)));
}
function isParamTag(pos, end, sourceFile) {
return isName(pos, end, sourceFile, paramTag);
}
function pushDocCommentLineText(docComments, text, blankLineCount) {
while (blankLineCount--)
docComments.push(ts.textPart(""));
docComments.push(ts.textPart(text));
}
function getCleanedJsDocComment(pos, end, sourceFile) {
var spacesToRemoveAfterAsterisk;
var docComments = [];
var blankLineCount = 0;
var isInParamTag = false;
while (pos < end) {
var docCommentTextOfLine = "";
pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile);
if (pos < end && sourceFile.text.charCodeAt(pos) === 42) {
var lineStartPos = pos + 1;
pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, spacesToRemoveAfterAsterisk);
if (spacesToRemoveAfterAsterisk === undefined && pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
spacesToRemoveAfterAsterisk = pos - lineStartPos;
}
}
else if (spacesToRemoveAfterAsterisk === undefined) {
spacesToRemoveAfterAsterisk = 0;
}
while (pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) {
var ch = sourceFile.text.charAt(pos);
if (ch === "@") {
if (isParamTag(pos, end, sourceFile)) {
isInParamTag = true;
pos += paramTag.length;
continue;
}
else {
isInParamTag = false;
}
}
if (!isInParamTag) {
docCommentTextOfLine += ch;
}
pos++;
}
pos = consumeLineBreaks(pos, end, sourceFile);
if (docCommentTextOfLine) {
pushDocCommentLineText(docComments, docCommentTextOfLine, blankLineCount);
blankLineCount = 0;
}
else if (!isInParamTag && docComments.length) {
blankLineCount++;
}
}
return docComments;
}
function getCleanedParamJsDocComment(pos, end, sourceFile) {
var paramHelpStringMargin;
var paramDocComments = [];
while (pos < end) {
if (isParamTag(pos, end, sourceFile)) {
var blankLineCount = 0;
var recordedParamTag = false;
pos = consumeWhiteSpaces(pos + paramTag.length);
if (pos >= end) {
break;
}
if (sourceFile.text.charCodeAt(pos) === 123) {
pos++;
for (var curlies = 1; pos < end; pos++) {
var charCode = sourceFile.text.charCodeAt(pos);
if (charCode === 123) {
curlies++;
continue;
}
if (charCode === 125) {
curlies--;
if (curlies === 0) {
pos++;
break;
}
else {
continue;
}
}
if (charCode === 64) {
break;
}
}
pos = consumeWhiteSpaces(pos);
if (pos >= end) {
break;
}
}
if (isName(pos, end, sourceFile, name)) {
pos = consumeWhiteSpaces(pos + name.length);
if (pos >= end) {
break;
}
var paramHelpString = "";
var firstLineParamHelpStringPos = pos;
while (pos < end) {
var ch = sourceFile.text.charCodeAt(pos);
if (ts.isLineBreak(ch)) {
if (paramHelpString) {
pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount);
paramHelpString = "";
blankLineCount = 0;
recordedParamTag = true;
}
else if (recordedParamTag) {
blankLineCount++;
}
setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos);
continue;
}
if (ch === 64) {
break;
}
paramHelpString += sourceFile.text.charAt(pos);
pos++;
}
if (paramHelpString) {
pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount);
}
paramHelpStringMargin = undefined;
}
if (sourceFile.text.charCodeAt(pos) === 64) {
continue;
}
}
pos++;
}
return paramDocComments;
function consumeWhiteSpaces(pos) {
while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) {
pos++;
}
return pos;
}
function setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos) {
pos = consumeLineBreaks(pos, end, sourceFile);
if (pos >= end) {
return;
}
if (paramHelpStringMargin === undefined) {
paramHelpStringMargin = sourceFile.getLineAndCharacterOfPosition(firstLineParamHelpStringPos).character;
}
var startOfLinePos = pos;
pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile, paramHelpStringMargin);
if (pos >= end) {
return;
}
var consumedSpaces = pos - startOfLinePos;
if (consumedSpaces < paramHelpStringMargin) {
var ch = sourceFile.text.charCodeAt(pos);
if (ch === 42) {
pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, paramHelpStringMargin - consumedSpaces - 1);
}
}
}
}
}
}
var TypeObject = (function () {
function TypeObject(checker, flags) {
this.checker = checker;
this.flags = flags;
}
TypeObject.prototype.getFlags = function () {
return this.flags;
};
TypeObject.prototype.getSymbol = function () {
return this.symbol;
};
TypeObject.prototype.getProperties = function () {
return this.checker.getPropertiesOfType(this);
};
TypeObject.prototype.getProperty = function (propertyName) {
return this.checker.getPropertyOfType(this, propertyName);
};
TypeObject.prototype.getApparentProperties = function () {
return this.checker.getAugmentedPropertiesOfType(this);
};
TypeObject.prototype.getCallSignatures = function () {
return this.checker.getSignaturesOfType(this, 0);
};
TypeObject.prototype.getConstructSignatures = function () {
return this.checker.getSignaturesOfType(this, 1);
};
TypeObject.prototype.getStringIndexType = function () {
return this.checker.getIndexTypeOfType(this, 0);
};
TypeObject.prototype.getNumberIndexType = function () {
return this.checker.getIndexTypeOfType(this, 1);
};
return TypeObject;
})();
var SignatureObject = (function () {
function SignatureObject(checker) {
this.checker = checker;
}
SignatureObject.prototype.getDeclaration = function () {
return this.declaration;
};
SignatureObject.prototype.getTypeParameters = function () {
return this.typeParameters;
};
SignatureObject.prototype.getParameters = function () {
return this.parameters;
};
SignatureObject.prototype.getReturnType = function () {
return this.checker.getReturnTypeOfSignature(this);
};
SignatureObject.prototype.getDocumentationComment = function () {
if (this.documentationComment === undefined) {
this.documentationComment = this.declaration ? getJsDocCommentsFromDeclarations([this.declaration], undefined, false) : [];
}
return this.documentationComment;
};
return SignatureObject;
})();
var SourceFileObject = (function (_super) {
__extends(SourceFileObject, _super);
function SourceFileObject() {
_super.apply(this, arguments);
}
SourceFileObject.prototype.update = function (newText, textChangeRange) {
return ts.updateSourceFile(this, newText, textChangeRange);
};
SourceFileObject.prototype.getLineAndCharacterOfPosition = function (position) {
return ts.getLineAndCharacterOfPosition(this, position);
};
SourceFileObject.prototype.getLineStarts = function () {
return ts.getLineStarts(this);
};
SourceFileObject.prototype.getPositionOfLineAndCharacter = function (line, character) {
return ts.getPositionOfLineAndCharacter(this, line, character);
};
SourceFileObject.prototype.getNamedDeclarations = function () {
if (!this.namedDeclarations) {
var sourceFile = this;
var namedDeclarations = [];
ts.forEachChild(sourceFile, function visit(node) {
switch (node.kind) {
case 193:
case 130:
case 129:
var functionDeclaration = node;
if (functionDeclaration.name && functionDeclaration.name.getFullWidth() > 0) {
var lastDeclaration = namedDeclarations.length > 0 ? namedDeclarations[namedDeclarations.length - 1] : undefined;
if (lastDeclaration && functionDeclaration.symbol === lastDeclaration.symbol) {
if (functionDeclaration.body && !lastDeclaration.body) {
namedDeclarations[namedDeclarations.length - 1] = functionDeclaration;
}
}
else {
namedDeclarations.push(functionDeclaration);
}
ts.forEachChild(node, visit);
}
break;
case 194:
case 195:
case 196:
case 197:
case 198:
case 200:
case 132:
case 133:
case 141:
if (node.name) {
namedDeclarations.push(node);
}
case 131:
case 173:
case 192:
case 146:
case 147:
case 199:
ts.forEachChild(node, visit);
break;
case 172:
if (ts.isFunctionBlock(node)) {
ts.forEachChild(node, visit);
}
break;
case 126:
if (!(node.flags & 112)) {
break;
}
case 191:
case 148:
if (ts.isBindingPattern(node.name)) {
ts.forEachChild(node.name, visit);
break;
}
case 209:
case 128:
case 127:
namedDeclarations.push(node);
break;
}
});
this.namedDeclarations = namedDeclarations;
}
return this.namedDeclarations;
};
return SourceFileObject;
})(NodeObject);
var TextChange = (function () {
function TextChange() {
}
return TextChange;
})();
ts.TextChange = TextChange;
(function (SymbolDisplayPartKind) {
SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName";
SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className";
SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName";
SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName";
SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName";
SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword";
SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak";
SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral";
SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral";
SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName";
SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName";
SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName";
SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator";
SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName";
SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName";
SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation";
SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space";
SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text";
SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName";
SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName";
SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName";
SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral";
})(ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {}));
var SymbolDisplayPartKind = ts.SymbolDisplayPartKind;
(function (OutputFileType) {
OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript";
OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap";
OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration";
})(ts.OutputFileType || (ts.OutputFileType = {}));
var OutputFileType = ts.OutputFileType;
(function (EndOfLineState) {
EndOfLineState[EndOfLineState["Start"] = 0] = "Start";
EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia";
EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral";
EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral";
EndOfLineState[EndOfLineState["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate";
EndOfLineState[EndOfLineState["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail";
EndOfLineState[EndOfLineState["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition";
})(ts.EndOfLineState || (ts.EndOfLineState = {}));
var EndOfLineState = ts.EndOfLineState;
(function (TokenClass) {
TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation";
TokenClass[TokenClass["Keyword"] = 1] = "Keyword";
TokenClass[TokenClass["Operator"] = 2] = "Operator";
TokenClass[TokenClass["Comment"] = 3] = "Comment";
TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace";
TokenClass[TokenClass["Identifier"] = 5] = "Identifier";
TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral";
TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral";
TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral";
})(ts.TokenClass || (ts.TokenClass = {}));
var TokenClass = ts.TokenClass;
var ScriptElementKind = (function () {
function ScriptElementKind() {
}
ScriptElementKind.unknown = "";
ScriptElementKind.keyword = "keyword";
ScriptElementKind.scriptElement = "script";
ScriptElementKind.moduleElement = "module";
ScriptElementKind.classElement = "class";
ScriptElementKind.interfaceElement = "interface";
ScriptElementKind.typeElement = "type";
ScriptElementKind.enumElement = "enum";
ScriptElementKind.variableElement = "var";
ScriptElementKind.localVariableElement = "local var";
ScriptElementKind.functionElement = "function";
ScriptElementKind.localFunctionElement = "local function";
ScriptElementKind.memberFunctionElement = "method";
ScriptElementKind.memberGetAccessorElement = "getter";
ScriptElementKind.memberSetAccessorElement = "setter";
ScriptElementKind.memberVariableElement = "property";
ScriptElementKind.constructorImplementationElement = "constructor";
ScriptElementKind.callSignatureElement = "call";
ScriptElementKind.indexSignatureElement = "index";
ScriptElementKind.constructSignatureElement = "construct";
ScriptElementKind.parameterElement = "parameter";
ScriptElementKind.typeParameterElement = "type parameter";
ScriptElementKind.primitiveType = "primitive type";
ScriptElementKind.label = "label";
ScriptElementKind.alias = "alias";
ScriptElementKind.constElement = "const";
ScriptElementKind.letElement = "let";
return ScriptElementKind;
})();
ts.ScriptElementKind = ScriptElementKind;
var ScriptElementKindModifier = (function () {
function ScriptElementKindModifier() {
}
ScriptElementKindModifier.none = "";
ScriptElementKindModifier.publicMemberModifier = "public";
ScriptElementKindModifier.privateMemberModifier = "private";
ScriptElementKindModifier.protectedMemberModifier = "protected";
ScriptElementKindModifier.exportedModifier = "export";
ScriptElementKindModifier.ambientModifier = "declare";
ScriptElementKindModifier.staticModifier = "static";
return ScriptElementKindModifier;
})();
ts.ScriptElementKindModifier = ScriptElementKindModifier;
var ClassificationTypeNames = (function () {
function ClassificationTypeNames() {
}
ClassificationTypeNames.comment = "comment";
ClassificationTypeNames.identifier = "identifier";
ClassificationTypeNames.keyword = "keyword";
ClassificationTypeNames.numericLiteral = "number";
ClassificationTypeNames.operator = "operator";
ClassificationTypeNames.stringLiteral = "string";
ClassificationTypeNames.whiteSpace = "whitespace";
ClassificationTypeNames.text = "text";
ClassificationTypeNames.punctuation = "punctuation";
ClassificationTypeNames.className = "class name";
ClassificationTypeNames.enumName = "enum name";
ClassificationTypeNames.interfaceName = "interface name";
ClassificationTypeNames.moduleName = "module name";
ClassificationTypeNames.typeParameterName = "type parameter name";
ClassificationTypeNames.typeAlias = "type alias name";
return ClassificationTypeNames;
})();
ts.ClassificationTypeNames = ClassificationTypeNames;
function displayPartsToString(displayParts) {
if (displayParts) {
return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join("");
}
return "";
}
ts.displayPartsToString = displayPartsToString;
function isLocalVariableOrFunction(symbol) {
if (symbol.parent) {
return false;
}
return ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 158) {
return true;
}
if (declaration.kind !== 191 && declaration.kind !== 193) {
return false;
}
for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) {
if (parent.kind === 210 || parent.kind === 199) {
return false;
}
}
return true;
});
}
function getDefaultCompilerOptions() {
return {
target: 1,
module: 0
};
}
ts.getDefaultCompilerOptions = getDefaultCompilerOptions;
var OperationCanceledException = (function () {
function OperationCanceledException() {
}
return OperationCanceledException;
})();
ts.OperationCanceledException = OperationCanceledException;
var CancellationTokenObject = (function () {
function CancellationTokenObject(cancellationToken) {
this.cancellationToken = cancellationToken;
}
CancellationTokenObject.prototype.isCancellationRequested = function () {
return this.cancellationToken && this.cancellationToken.isCancellationRequested();
};
CancellationTokenObject.prototype.throwIfCancellationRequested = function () {
if (this.isCancellationRequested()) {
throw new OperationCanceledException();
}
};
CancellationTokenObject.None = new CancellationTokenObject(null);
return CancellationTokenObject;
})();
ts.CancellationTokenObject = CancellationTokenObject;
var HostCache = (function () {
function HostCache(host) {
this.host = host;
this.fileNameToEntry = {};
var rootFileNames = host.getScriptFileNames();
for (var i = 0, n = rootFileNames.length; i < n; i++) {
this.createEntry(rootFileNames[i]);
}
this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions();
}
HostCache.prototype.compilationSettings = function () {
return this._compilationSettings;
};
HostCache.prototype.createEntry = function (fileName) {
var entry;
var scriptSnapshot = this.host.getScriptSnapshot(fileName);
if (scriptSnapshot) {
entry = {
hostFileName: fileName,
version: this.host.getScriptVersion(fileName),
scriptSnapshot: scriptSnapshot
};
}
return this.fileNameToEntry[ts.normalizeSlashes(fileName)] = entry;
};
HostCache.prototype.getEntry = function (fileName) {
return ts.lookUp(this.fileNameToEntry, ts.normalizeSlashes(fileName));
};
HostCache.prototype.contains = function (fileName) {
return ts.hasProperty(this.fileNameToEntry, ts.normalizeSlashes(fileName));
};
HostCache.prototype.getOrCreateEntry = function (fileName) {
if (this.contains(fileName)) {
return this.getEntry(fileName);
}
return this.createEntry(fileName);
};
HostCache.prototype.getRootFileNames = function () {
var _this = this;
var fileNames = [];
ts.forEachKey(this.fileNameToEntry, function (key) {
if (ts.hasProperty(_this.fileNameToEntry, key) && _this.fileNameToEntry[key])
fileNames.push(key);
});
return fileNames;
};
HostCache.prototype.getVersion = function (fileName) {
var file = this.getEntry(fileName);
return file && file.version;
};
HostCache.prototype.getScriptSnapshot = function (fileName) {
var file = this.getEntry(fileName);
return file && file.scriptSnapshot;
};
HostCache.prototype.getChangeRange = function (fileName, lastKnownVersion, oldScriptSnapshot) {
var currentVersion = this.getVersion(fileName);
if (lastKnownVersion === currentVersion) {
return ts.unchangedTextChangeRange;
}
var scriptSnapshot = this.getScriptSnapshot(fileName);
return scriptSnapshot.getChangeRange(oldScriptSnapshot);
};
return HostCache;
})();
var SyntaxTreeCache = (function () {
function SyntaxTreeCache(host) {
this.host = host;
this.currentFileName = "";
this.currentFileVersion = null;
this.currentSourceFile = null;
}
SyntaxTreeCache.prototype.log = function (message) {
if (this.host.log) {
this.host.log(message);
}
};
SyntaxTreeCache.prototype.initialize = function (fileName) {
var start = new Date().getTime();
this.hostCache = new HostCache(this.host);
this.log("SyntaxTreeCache.Initialize: new HostCache: " + (new Date().getTime() - start));
var version = this.hostCache.getVersion(fileName);
var sourceFile;
if (this.currentFileName !== fileName) {
var scriptSnapshot = this.hostCache.getScriptSnapshot(fileName);
var start = new Date().getTime();
sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, 2, version, true);
this.log("SyntaxTreeCache.Initialize: createSourceFile: " + (new Date().getTime() - start));
}
else if (this.currentFileVersion !== version) {
var scriptSnapshot = this.hostCache.getScriptSnapshot(fileName);
var editRange = this.hostCache.getChangeRange(fileName, this.currentFileVersion, this.currentSourceFile.scriptSnapshot);
var start = new Date().getTime();
sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version, editRange);
this.log("SyntaxTreeCache.Initialize: updateSourceFile: " + (new Date().getTime() - start));
}
if (sourceFile) {
this.currentFileVersion = version;
this.currentFileName = fileName;
this.currentSourceFile = sourceFile;
}
};
SyntaxTreeCache.prototype.getCurrentSourceFile = function (fileName) {
this.initialize(fileName);
return this.currentSourceFile;
};
SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (fileName) {
return this.getCurrentSourceFile(fileName).scriptSnapshot;
};
return SyntaxTreeCache;
})();
function setSourceFileFields(sourceFile, scriptSnapshot, version) {
sourceFile.version = version;
sourceFile.scriptSnapshot = scriptSnapshot;
}
function createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, setNodeParents) {
var sourceFile = ts.createSourceFile(fileName, scriptSnapshot.getText(0, scriptSnapshot.getLength()), scriptTarget, setNodeParents);
setSourceFileFields(sourceFile, scriptSnapshot, version);
sourceFile.nameTable = sourceFile.identifiers;
return sourceFile;
}
ts.createLanguageServiceSourceFile = createLanguageServiceSourceFile;
ts.disableIncrementalParsing = false;
function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version, textChangeRange, aggressiveChecks) {
if (textChangeRange) {
if (version !== sourceFile.version) {
if (!ts.disableIncrementalParsing) {
var newSourceFile = ts.updateSourceFile(sourceFile, scriptSnapshot.getText(0, scriptSnapshot.getLength()), textChangeRange, aggressiveChecks);
setSourceFileFields(newSourceFile, scriptSnapshot, version);
newSourceFile.nameTable = undefined;
return newSourceFile;
}
}
}
return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, true);
}
ts.updateLanguageServiceSourceFile = updateLanguageServiceSourceFile;
function createDocumentRegistry() {
var buckets = {};
function getKeyFromCompilationSettings(settings) {
return "_" + settings.target;
}
function getBucketForCompilationSettings(settings, createIfMissing) {
var key = getKeyFromCompilationSettings(settings);
var bucket = ts.lookUp(buckets, key);
if (!bucket && createIfMissing) {
buckets[key] = bucket = {};
}
return bucket;
}
function reportStats() {
var bucketInfoArray = Object.keys(buckets).filter(function (name) { return name && name.charAt(0) === '_'; }).map(function (name) {
var entries = ts.lookUp(buckets, name);
var sourceFiles = [];
for (var i in entries) {
var entry = entries[i];
sourceFiles.push({
name: i,
refCount: entry.refCount,
references: entry.owners.slice(0)
});
}
sourceFiles.sort(function (x, y) { return y.refCount - x.refCount; });
return {
bucket: name,
sourceFiles: sourceFiles
};
});
return JSON.stringify(bucketInfoArray, null, 2);
}
function acquireDocument(fileName, compilationSettings, scriptSnapshot, version) {
var bucket = getBucketForCompilationSettings(compilationSettings, true);
var entry = ts.lookUp(bucket, fileName);
if (!entry) {
var sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, compilationSettings.target, version, false);
bucket[fileName] = entry = {
sourceFile: sourceFile,
refCount: 0,
owners: []
};
}
entry.refCount++;
return entry.sourceFile;
}
function updateDocument(sourceFile, fileName, compilationSettings, scriptSnapshot, version, textChangeRange) {
var bucket = getBucketForCompilationSettings(compilationSettings, false);
ts.Debug.assert(bucket !== undefined);
var entry = ts.lookUp(bucket, fileName);
ts.Debug.assert(entry !== undefined);
entry.sourceFile = updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version, textChangeRange);
return entry.sourceFile;
}
function releaseDocument(fileName, compilationSettings) {
var bucket = getBucketForCompilationSettings(compilationSettings, false);
ts.Debug.assert(bucket !== undefined);
var entry = ts.lookUp(bucket, fileName);
entry.refCount--;
ts.Debug.assert(entry.refCount >= 0);
if (entry.refCount === 0) {
delete bucket[fileName];
}
}
return {
acquireDocument: acquireDocument,
updateDocument: updateDocument,
releaseDocument: releaseDocument,
reportStats: reportStats
};
}
ts.createDocumentRegistry = createDocumentRegistry;
function preProcessFile(sourceText, readImportFiles) {
if (readImportFiles === void 0) { readImportFiles = true; }
var referencedFiles = [];
var importedFiles = [];
var isNoDefaultLib = false;
function processTripleSlashDirectives() {
var commentRanges = ts.getLeadingCommentRanges(sourceText, 0);
ts.forEach(commentRanges, function (commentRange) {
var comment = sourceText.substring(commentRange.pos, commentRange.end);
var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, commentRange);
if (referencePathMatchResult) {
isNoDefaultLib = referencePathMatchResult.isNoDefaultLib;
var fileReference = referencePathMatchResult.fileReference;
if (fileReference) {
referencedFiles.push(fileReference);
}
}
});
}
function processImport() {
scanner.setText(sourceText);
var token = scanner.scan();
while (token !== 1) {
if (token === 84) {
token = scanner.scan();
if (token === 64) {
token = scanner.scan();
if (token === 52) {
token = scanner.scan();
if (token === 116) {
token = scanner.scan();
if (token === 16) {
token = scanner.scan();
if (token === 8) {
var importPath = scanner.getTokenValue();
var pos = scanner.getTokenPos();
importedFiles.push({
fileName: importPath,
pos: pos,
end: pos + importPath.length
});
}
}
}
}
}
}
token = scanner.scan();
}
scanner.setText(undefined);
}
if (readImportFiles) {
processImport();
}
processTripleSlashDirectives();
return { referencedFiles: referencedFiles, importedFiles: importedFiles, isLibFile: isNoDefaultLib };
}
ts.preProcessFile = preProcessFile;
function getTargetLabel(referenceNode, labelName) {
while (referenceNode) {
if (referenceNode.kind === 187 && referenceNode.label.text === labelName) {
return referenceNode.label;
}
referenceNode = referenceNode.parent;
}
return undefined;
}
function isJumpStatementTarget(node) {
return node.kind === 64 &&
(node.parent.kind === 183 || node.parent.kind === 182) &&
node.parent.label === node;
}
function isLabelOfLabeledStatement(node) {
return node.kind === 64 &&
node.parent.kind === 187 &&
node.parent.label === node;
}
function isLabeledBy(node, labelName) {
for (var owner = node.parent; owner.kind === 187; owner = owner.parent) {
if (owner.label.text === labelName) {
return true;
}
}
return false;
}
function isLabelName(node) {
return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node);
}
function isRightSideOfQualifiedName(node) {
return node.parent.kind === 123 && node.parent.right === node;
}
function isRightSideOfPropertyAccess(node) {
return node && node.parent && node.parent.kind === 151 && node.parent.name === node;
}
function isCallExpressionTarget(node) {
if (isRightSideOfPropertyAccess(node)) {
node = node.parent;
}
return node && node.parent && node.parent.kind === 153 && node.parent.expression === node;
}
function isNewExpressionTarget(node) {
if (isRightSideOfPropertyAccess(node)) {
node = node.parent;
}
return node && node.parent && node.parent.kind === 154 && node.parent.expression === node;
}
function isNameOfModuleDeclaration(node) {
return node.parent.kind === 198 && node.parent.name === node;
}
function isNameOfFunctionDeclaration(node) {
return node.kind === 64 &&
ts.isAnyFunction(node.parent) && node.parent.name === node;
}
function isNameOfPropertyAssignment(node) {
return (node.kind === 64 || node.kind === 8 || node.kind === 7) &&
(node.parent.kind === 207 || node.parent.kind === 208) && node.parent.name === node;
}
function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
if (node.kind === 8 || node.kind === 7) {
switch (node.parent.kind) {
case 128:
case 127:
case 207:
case 209:
case 130:
case 129:
case 132:
case 133:
case 198:
return node.parent.name === node;
case 152:
return node.parent.argumentExpression === node;
}
}
return false;
}
function isNameOfExternalModuleImportOrDeclaration(node) {
if (node.kind === 8) {
return isNameOfModuleDeclaration(node) ||
(ts.isExternalModuleImportDeclaration(node.parent.parent) && ts.getExternalModuleImportDeclarationExpression(node.parent.parent) === node);
}
return false;
}
function isInsideComment(sourceFile, token, position) {
return position <= token.getStart(sourceFile) &&
(isInsideCommentRange(ts.getTrailingCommentRanges(sourceFile.text, token.getFullStart())) ||
isInsideCommentRange(ts.getLeadingCommentRanges(sourceFile.text, token.getFullStart())));
function isInsideCommentRange(comments) {
return ts.forEach(comments, function (comment) {
if (comment.pos < position && position < comment.end) {
return true;
}
else if (position === comment.end) {
var text = sourceFile.text;
var width = comment.end - comment.pos;
if (width <= 2 || text.charCodeAt(comment.pos + 1) === 47) {
return true;
}
else {
return !(text.charCodeAt(comment.end - 1) === 47 &&
text.charCodeAt(comment.end - 2) === 42);
}
}
return false;
});
}
}
var SemanticMeaning;
(function (SemanticMeaning) {
SemanticMeaning[SemanticMeaning["None"] = 0] = "None";
SemanticMeaning[SemanticMeaning["Value"] = 1] = "Value";
SemanticMeaning[SemanticMeaning["Type"] = 2] = "Type";
SemanticMeaning[SemanticMeaning["Namespace"] = 4] = "Namespace";
SemanticMeaning[SemanticMeaning["All"] = 7] = "All";
})(SemanticMeaning || (SemanticMeaning = {}));
var BreakContinueSearchType;
(function (BreakContinueSearchType) {
BreakContinueSearchType[BreakContinueSearchType["None"] = 0] = "None";
BreakContinueSearchType[BreakContinueSearchType["Unlabeled"] = 1] = "Unlabeled";
BreakContinueSearchType[BreakContinueSearchType["Labeled"] = 2] = "Labeled";
BreakContinueSearchType[BreakContinueSearchType["All"] = 3] = "All";
})(BreakContinueSearchType || (BreakContinueSearchType = {}));
var keywordCompletions = [];
for (var i = 65; i <= 122; i++) {
keywordCompletions.push({
name: ts.tokenToString(i),
kind: ScriptElementKind.keyword,
kindModifiers: ScriptElementKindModifier.none
});
}
function getContainerNode(node) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 210:
case 130:
case 129:
case 193:
case 158:
case 132:
case 133:
case 194:
case 195:
case 197:
case 198:
return node;
}
}
}
ts.getContainerNode = getContainerNode;
function getNodeKind(node) {
switch (node.kind) {
case 198: return ScriptElementKind.moduleElement;
case 194: return ScriptElementKind.classElement;
case 195: return ScriptElementKind.interfaceElement;
case 196: return ScriptElementKind.typeElement;
case 197: return ScriptElementKind.enumElement;
case 191:
return ts.isConst(node) ? ScriptElementKind.constElement : ts.isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement;
case 193: return ScriptElementKind.functionElement;
case 132: return ScriptElementKind.memberGetAccessorElement;
case 133: return ScriptElementKind.memberSetAccessorElement;
case 130:
case 129:
return ScriptElementKind.memberFunctionElement;
case 128:
case 127:
return ScriptElementKind.memberVariableElement;
case 136: return ScriptElementKind.indexSignatureElement;
case 135: return ScriptElementKind.constructSignatureElement;
case 134: return ScriptElementKind.callSignatureElement;
case 131: return ScriptElementKind.constructorImplementationElement;
case 125: return ScriptElementKind.typeParameterElement;
case 209: return ScriptElementKind.variableElement;
case 126: return (node.flags & 112) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement;
}
return ScriptElementKind.unknown;
}
ts.getNodeKind = getNodeKind;
function createLanguageService(host, documentRegistry) {
if (documentRegistry === void 0) { documentRegistry = createDocumentRegistry(); }
var syntaxTreeCache = new SyntaxTreeCache(host);
var ruleProvider;
var program;
var typeInfoResolver;
var useCaseSensitivefileNames = false;
var cancellationToken = new CancellationTokenObject(host.getCancellationToken && host.getCancellationToken());
var activeCompletionSession;
if (!ts.localizedDiagnosticMessages && host.getLocalizedDiagnosticMessages) {
ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages();
}
function log(message) {
if (host.log) {
host.log(message);
}
}
function getCanonicalFileName(fileName) {
return useCaseSensitivefileNames ? fileName : fileName.toLowerCase();
}
function getValidSourceFile(fileName) {
var sourceFile = program.getSourceFile(getCanonicalFileName(fileName));
if (!sourceFile) {
throw new Error("Could not find file: '" + fileName + "'.");
}
return sourceFile;
}
function getRuleProvider(options) {
if (!ruleProvider) {
ruleProvider = new ts.formatting.RulesProvider();
}
ruleProvider.ensureUpToDate(options);
return ruleProvider;
}
function synchronizeHostData() {
var hostCache = new HostCache(host);
if (programUpToDate()) {
return;
}
var oldSettings = program && program.getCompilerOptions();
var newSettings = hostCache.compilationSettings();
var changesInCompilationSettingsAffectSyntax = oldSettings && oldSettings.target !== newSettings.target;
var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, {
getSourceFile: getOrCreateSourceFile,
getCancellationToken: function () { return cancellationToken; },
getCanonicalFileName: function (fileName) { return useCaseSensitivefileNames ? fileName : fileName.toLowerCase(); },
useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; },
getNewLine: function () { return host.getNewLine ? host.getNewLine() : "\r\n"; },
getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); },
writeFile: function (fileName, data, writeByteOrderMark) { },
getCurrentDirectory: function () { return host.getCurrentDirectory(); }
});
if (program) {
var oldSourceFiles = program.getSourceFiles();
for (var i = 0, n = oldSourceFiles.length; i < n; i++) {
var fileName = oldSourceFiles[i].fileName;
if (!newProgram.getSourceFile(fileName) || changesInCompilationSettingsAffectSyntax) {
documentRegistry.releaseDocument(fileName, oldSettings);
}
}
}
program = newProgram;
typeInfoResolver = program.getTypeChecker();
return;
function getOrCreateSourceFile(fileName) {
var hostFileInformation = hostCache.getOrCreateEntry(fileName);
if (!hostFileInformation) {
return undefined;
}
if (!changesInCompilationSettingsAffectSyntax) {
var oldSourceFile = program && program.getSourceFile(fileName);
if (oldSourceFile) {
if (sourceFileUpToDate(oldSourceFile)) {
return oldSourceFile;
}
var textChangeRange = hostCache.getChangeRange(fileName, oldSourceFile.version, oldSourceFile.scriptSnapshot);
return documentRegistry.updateDocument(oldSourceFile, fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, textChangeRange);
}
}
return documentRegistry.acquireDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version);
}
function sourceFileUpToDate(sourceFile) {
return sourceFile && sourceFile.version === hostCache.getVersion(sourceFile.fileName);
}
function programUpToDate() {
if (!program) {
return false;
}
var rootFileNames = hostCache.getRootFileNames();
if (program.getSourceFiles().length !== rootFileNames.length) {
return false;
}
for (var i = 0, n = rootFileNames.length; i < n; i++) {
if (!sourceFileUpToDate(program.getSourceFile(rootFileNames[i]))) {
return false;
}
}
return ts.compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings());
}
}
function getProgram() {
synchronizeHostData();
return program;
}
function cleanupSemanticCache() {
if (program) {
typeInfoResolver = program.getTypeChecker();
}
}
function dispose() {
if (program) {
ts.forEach(program.getSourceFiles(), function (f) {
documentRegistry.releaseDocument(f.fileName, program.getCompilerOptions());
});
}
}
function getSyntacticDiagnostics(fileName) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
return program.getSyntacticDiagnostics(getValidSourceFile(fileName));
}
function getSemanticDiagnostics(fileName) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var targetSourceFile = getValidSourceFile(fileName);
var semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile);
if (!program.getCompilerOptions().declaration) {
return semanticDiagnostics;
}
var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile);
return semanticDiagnostics.concat(declarationDiagnostics);
}
function getCompilerOptionsDiagnostics() {
synchronizeHostData();
return program.getGlobalDiagnostics();
}
function getValidCompletionEntryDisplayName(symbol, target) {
var displayName = symbol.getName();
if (displayName && displayName.length > 0) {
var firstCharCode = displayName.charCodeAt(0);
if ((symbol.flags & 1536) && (firstCharCode === 39 || firstCharCode === 34)) {
return undefined;
}
if (displayName && displayName.length >= 2 && firstCharCode === displayName.charCodeAt(displayName.length - 1) &&
(firstCharCode === 39 || firstCharCode === 34)) {
displayName = displayName.substring(1, displayName.length - 1);
}
var isValid = ts.isIdentifierStart(displayName.charCodeAt(0), target);
for (var i = 1, n = displayName.length; isValid && i < n; i++) {
isValid = ts.isIdentifierPart(displayName.charCodeAt(i), target);
}
if (isValid) {
return ts.unescapeIdentifier(displayName);
}
}
return undefined;
}
function createCompletionEntry(symbol, typeChecker, location) {
var displayName = getValidCompletionEntryDisplayName(symbol, program.getCompilerOptions().target);
if (!displayName) {
return undefined;
}
return {
name: displayName,
kind: getSymbolKind(symbol, typeChecker, location),
kindModifiers: getSymbolModifiers(symbol)
};
}
function getCompletionsAtPosition(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var syntacticStart = new Date().getTime();
var sourceFile = getValidSourceFile(fileName);
var start = new Date().getTime();
var currentToken = ts.getTokenAtPosition(sourceFile, position);
log("getCompletionsAtPosition: Get current token: " + (new Date().getTime() - start));
var start = new Date().getTime();
var insideComment = isInsideComment(sourceFile, currentToken, position);
log("getCompletionsAtPosition: Is inside comment: " + (new Date().getTime() - start));
if (insideComment) {
log("Returning an empty list because completion was inside a comment.");
return undefined;
}
var start = new Date().getTime();
var previousToken = ts.findPrecedingToken(position, sourceFile);
log("getCompletionsAtPosition: Get previous token 1: " + (new Date().getTime() - start));
if (previousToken && position <= previousToken.end && previousToken.kind === 64) {
var start = new Date().getTime();
previousToken = ts.findPrecedingToken(previousToken.pos, sourceFile);
log("getCompletionsAtPosition: Get previous token 2: " + (new Date().getTime() - start));
}
if (previousToken && isCompletionListBlocker(previousToken)) {
log("Returning an empty list because completion was requested in an invalid position.");
return undefined;
}
var node;
var isRightOfDot;
if (previousToken && previousToken.kind === 20 && previousToken.parent.kind === 151) {
node = previousToken.parent.expression;
isRightOfDot = true;
}
else if (previousToken && previousToken.kind === 20 && previousToken.parent.kind === 123) {
node = previousToken.parent.left;
isRightOfDot = true;
}
else {
node = currentToken;
isRightOfDot = false;
}
activeCompletionSession = {
fileName: fileName,
position: position,
entries: [],
symbols: {},
typeChecker: typeInfoResolver
};
log("getCompletionsAtPosition: Syntactic work: " + (new Date().getTime() - syntacticStart));
var location = ts.getTouchingPropertyName(sourceFile, position);
var semanticStart = new Date().getTime();
if (isRightOfDot) {
var symbols = [];
var isMemberCompletion = true;
var isNewIdentifierLocation = false;
if (node.kind === 64 || node.kind === 123 || node.kind === 151) {
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (symbol && symbol.flags & 8388608) {
symbol = typeInfoResolver.getAliasedSymbol(symbol);
}
if (symbol && symbol.flags & 1952) {
ts.forEachValue(symbol.exports, function (symbol) {
if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) {
symbols.push(symbol);
}
});
}
}
var type = typeInfoResolver.getTypeAtLocation(node);
if (type) {
ts.forEach(type.getApparentProperties(), function (symbol) {
if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) {
symbols.push(symbol);
}
});
}
getCompletionEntriesFromSymbols(symbols, activeCompletionSession);
}
else {
var containingObjectLiteral = getContainingObjectLiteralApplicableForCompletion(previousToken);
if (containingObjectLiteral) {
isMemberCompletion = true;
isNewIdentifierLocation = true;
var contextualType = typeInfoResolver.getContextualType(containingObjectLiteral);
if (!contextualType) {
return undefined;
}
var contextualTypeMembers = typeInfoResolver.getPropertiesOfType(contextualType);
if (contextualTypeMembers && contextualTypeMembers.length > 0) {
var filteredMembers = filterContextualMembersList(contextualTypeMembers, containingObjectLiteral.properties);
getCompletionEntriesFromSymbols(filteredMembers, activeCompletionSession);
}
}
else {
isMemberCompletion = false;
isNewIdentifierLocation = isNewIdentifierDefinitionLocation(previousToken);
var symbolMeanings = 793056 | 107455 | 1536 | 8388608;
var symbols = typeInfoResolver.getSymbolsInScope(node, symbolMeanings);
getCompletionEntriesFromSymbols(symbols, activeCompletionSession);
}
}
if (!isMemberCompletion) {
Array.prototype.push.apply(activeCompletionSession.entries, keywordCompletions);
}
log("getCompletionsAtPosition: Semantic work: " + (new Date().getTime() - semanticStart));
return {
isMemberCompletion: isMemberCompletion,
isNewIdentifierLocation: isNewIdentifierLocation,
isBuilder: isNewIdentifierDefinitionLocation,
entries: activeCompletionSession.entries
};
function getCompletionEntriesFromSymbols(symbols, session) {
var start = new Date().getTime();
ts.forEach(symbols, function (symbol) {
var entry = createCompletionEntry(symbol, session.typeChecker, location);
if (entry) {
var id = ts.escapeIdentifier(entry.name);
if (!ts.lookUp(session.symbols, id)) {
session.entries.push(entry);
session.symbols[id] = symbol;
}
}
});
log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start));
}
function isCompletionListBlocker(previousToken) {
var start = new Date().getTime();
var result = isInStringOrRegularExpressionOrTemplateLiteral(previousToken) ||
isIdentifierDefinitionLocation(previousToken) ||
isRightOfIllegalDot(previousToken);
log("getCompletionsAtPosition: isCompletionListBlocker: " + (new Date().getTime() - start));
return result;
}
function isNewIdentifierDefinitionLocation(previousToken) {
if (previousToken) {
var containingNodeKind = previousToken.parent.kind;
switch (previousToken.kind) {
case 23:
return containingNodeKind === 153 || containingNodeKind === 131 || containingNodeKind === 154 || containingNodeKind === 149 || containingNodeKind === 165;
case 16:
return containingNodeKind === 153 || containingNodeKind === 131 || containingNodeKind === 154 || containingNodeKind === 157;
case 18:
return containingNodeKind === 149;
case 115:
return true;
case 20:
return containingNodeKind === 198;
case 14:
return containingNodeKind === 194;
case 52:
return containingNodeKind === 191 || containingNodeKind === 165;
case 11:
return containingNodeKind === 167;
case 12:
return containingNodeKind === 171;
case 107:
case 105:
case 106:
return containingNodeKind === 128;
}
switch (previousToken.getText()) {
case "public":
case "protected":
case "private":
return true;
}
}
return false;
}
function isInStringOrRegularExpressionOrTemplateLiteral(previousToken) {
if (previousToken.kind === 8 || previousToken.kind === 9 || ts.isTemplateLiteralKind(previousToken.kind)) {
var start = previousToken.getStart();
var end = previousToken.getEnd();
if (start < position && position < end) {
return true;
}
else if (position === end) {
return !!previousToken.isUnterminated;
}
}
return false;
}
function getContainingObjectLiteralApplicableForCompletion(previousToken) {
if (previousToken) {
var parent = previousToken.parent;
switch (previousToken.kind) {
case 14:
case 23:
if (parent && parent.kind === 150) {
return parent;
}
break;
}
}
return undefined;
}
function isFunction(kind) {
switch (kind) {
case 158:
case 159:
case 193:
case 130:
case 129:
case 132:
case 133:
case 134:
case 135:
case 136:
return true;
}
return false;
}
function isIdentifierDefinitionLocation(previousToken) {
if (previousToken) {
var containingNodeKind = previousToken.parent.kind;
switch (previousToken.kind) {
case 23:
return containingNodeKind === 191 ||
containingNodeKind === 192 ||
containingNodeKind === 173 ||
containingNodeKind === 197 ||
isFunction(containingNodeKind) ||
containingNodeKind === 194 ||
containingNodeKind === 193 ||
containingNodeKind === 195 ||
containingNodeKind === 147 ||
containingNodeKind === 146;
case 20:
return containingNodeKind === 147;
case 18:
return containingNodeKind === 147;
case 16:
return containingNodeKind === 206 ||
isFunction(containingNodeKind);
case 14:
return containingNodeKind === 197 ||
containingNodeKind === 195 ||
containingNodeKind === 141 ||
containingNodeKind === 146;
case 22:
return containingNodeKind === 127 &&
(previousToken.parent.parent.kind === 195 ||
previousToken.parent.parent.kind === 141);
case 24:
return containingNodeKind === 194 ||
containingNodeKind === 193 ||
containingNodeKind === 195 ||
isFunction(containingNodeKind);
case 108:
return containingNodeKind === 128;
case 21:
return containingNodeKind === 126 ||
containingNodeKind === 131 ||
(previousToken.parent.parent.kind === 147);
case 107:
case 105:
case 106:
return containingNodeKind === 126;
case 68:
case 76:
case 102:
case 82:
case 97:
case 114:
case 118:
case 84:
case 103:
case 69:
case 109:
return true;
}
switch (previousToken.getText()) {
case "class":
case "interface":
case "enum":
case "function":
case "var":
case "static":
case "let":
case "const":
case "yield":
return true;
}
}
return false;
}
function isRightOfIllegalDot(previousToken) {
if (previousToken && previousToken.kind === 7) {
var text = previousToken.getFullText();
return text.charAt(text.length - 1) === ".";
}
return false;
}
function filterContextualMembersList(contextualMemberSymbols, existingMembers) {
if (!existingMembers || existingMembers.length === 0) {
return contextualMemberSymbols;
}
var existingMemberNames = {};
ts.forEach(existingMembers, function (m) {
if (m.kind !== 207 && m.kind !== 208) {
return;
}
if (m.getStart() <= position && position <= m.getEnd()) {
return;
}
existingMemberNames[m.name.text] = true;
});
var filteredMembers = [];
ts.forEach(contextualMemberSymbols, function (s) {
if (!existingMemberNames[s.name]) {
filteredMembers.push(s);
}
});
return filteredMembers;
}
}
function getCompletionEntryDetails(fileName, position, entryName) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var session = activeCompletionSession;
if (!session || session.fileName !== fileName || session.position !== position) {
return undefined;
}
var symbol = ts.lookUp(activeCompletionSession.symbols, ts.escapeIdentifier(entryName));
if (symbol) {
var location = ts.getTouchingPropertyName(sourceFile, position);
var completionEntry = createCompletionEntry(symbol, session.typeChecker, location);
ts.Debug.assert(session.typeChecker.getTypeOfSymbolAtLocation(symbol, location) !== undefined, "Could not find type for symbol");
var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getValidSourceFile(fileName), location, session.typeChecker, location, 7);
return {
name: entryName,
kind: displayPartsDocumentationsAndSymbolKind.symbolKind,
kindModifiers: completionEntry.kindModifiers,
displayParts: displayPartsDocumentationsAndSymbolKind.displayParts,
documentation: displayPartsDocumentationsAndSymbolKind.documentation
};
}
else {
return {
name: entryName,
kind: ScriptElementKind.keyword,
kindModifiers: ScriptElementKindModifier.none,
displayParts: [ts.displayPart(entryName, 5)],
documentation: undefined
};
}
}
function getSymbolKind(symbol, typeResolver, location) {
var flags = symbol.getFlags();
if (flags & 32)
return ScriptElementKind.classElement;
if (flags & 384)
return ScriptElementKind.enumElement;
if (flags & 524288)
return ScriptElementKind.typeElement;
if (flags & 64)
return ScriptElementKind.interfaceElement;
if (flags & 262144)
return ScriptElementKind.typeParameterElement;
var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver, location);
if (result === ScriptElementKind.unknown) {
if (flags & 262144)
return ScriptElementKind.typeParameterElement;
if (flags & 8)
return ScriptElementKind.variableElement;
if (flags & 8388608)
return ScriptElementKind.alias;
if (flags & 1536)
return ScriptElementKind.moduleElement;
}
return result;
}
function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, typeResolver, location) {
if (typeResolver.isUndefinedSymbol(symbol)) {
return ScriptElementKind.variableElement;
}
if (typeResolver.isArgumentsSymbol(symbol)) {
return ScriptElementKind.localVariableElement;
}
if (flags & 3) {
if (ts.isFirstDeclarationOfSymbolParameter(symbol)) {
return ScriptElementKind.parameterElement;
}
else if (symbol.valueDeclaration && ts.isConst(symbol.valueDeclaration)) {
return ScriptElementKind.constElement;
}
else if (ts.forEach(symbol.declarations, ts.isLet)) {
return ScriptElementKind.letElement;
}
return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement;
}
if (flags & 16)
return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement;
if (flags & 32768)
return ScriptElementKind.memberGetAccessorElement;
if (flags & 65536)
return ScriptElementKind.memberSetAccessorElement;
if (flags & 8192)
return ScriptElementKind.memberFunctionElement;
if (flags & 16384)
return ScriptElementKind.constructorImplementationElement;
if (flags & 4) {
if (flags & 268435456) {
var unionPropertyKind = ts.forEach(typeInfoResolver.getRootSymbols(symbol), function (rootSymbol) {
var rootSymbolFlags = rootSymbol.getFlags();
if (rootSymbolFlags & (98308 | 3)) {
return ScriptElementKind.memberVariableElement;
}
ts.Debug.assert(!!(rootSymbolFlags & 8192));
});
if (!unionPropertyKind) {
var typeOfUnionProperty = typeInfoResolver.getTypeOfSymbolAtLocation(symbol, location);
if (typeOfUnionProperty.getCallSignatures().length) {
return ScriptElementKind.memberFunctionElement;
}
return ScriptElementKind.memberVariableElement;
}
return unionPropertyKind;
}
return ScriptElementKind.memberVariableElement;
}
return ScriptElementKind.unknown;
}
function getTypeKind(type) {
var flags = type.getFlags();
if (flags & 128)
return ScriptElementKind.enumElement;
if (flags & 1024)
return ScriptElementKind.classElement;
if (flags & 2048)
return ScriptElementKind.interfaceElement;
if (flags & 512)
return ScriptElementKind.typeParameterElement;
if (flags & 1048703)
return ScriptElementKind.primitiveType;
if (flags & 256)
return ScriptElementKind.primitiveType;
return ScriptElementKind.unknown;
}
function getSymbolModifiers(symbol) {
return symbol && symbol.declarations && symbol.declarations.length > 0 ? ts.getNodeModifiers(symbol.declarations[0]) : ScriptElementKindModifier.none;
}
function getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, enclosingDeclaration, typeResolver, location, semanticMeaning) {
if (semanticMeaning === void 0) { semanticMeaning = getMeaningFromLocation(location); }
var displayParts = [];
var documentation;
var symbolFlags = symbol.flags;
var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, symbolFlags, typeResolver, location);
var hasAddedSymbolInfo;
if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 32 || symbolFlags & 8388608) {
if (symbolKind === ScriptElementKind.memberGetAccessorElement || symbolKind === ScriptElementKind.memberSetAccessorElement) {
symbolKind = ScriptElementKind.memberVariableElement;
}
var type = typeResolver.getTypeOfSymbolAtLocation(symbol, location);
if (type) {
if (location.parent && location.parent.kind === 151) {
var right = location.parent.name;
if (right === location || (right && right.getFullWidth() === 0)) {
location = location.parent;
}
}
var callExpression;
if (location.kind === 153 || location.kind === 154) {
callExpression = location;
}
else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) {
callExpression = location.parent;
}
if (callExpression) {
var candidateSignatures = [];
signature = typeResolver.getResolvedSignature(callExpression, candidateSignatures);
if (!signature && candidateSignatures.length) {
signature = candidateSignatures[0];
}
var useConstructSignatures = callExpression.kind === 154 || callExpression.expression.kind === 90;
var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
if (!ts.contains(allSignatures, signature.target || signature)) {
signature = allSignatures.length ? allSignatures[0] : undefined;
}
if (signature) {
if (useConstructSignatures && (symbolFlags & 32)) {
symbolKind = ScriptElementKind.constructorImplementationElement;
addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
}
else if (symbolFlags & 8388608) {
symbolKind = ScriptElementKind.alias;
displayParts.push(ts.punctuationPart(16));
displayParts.push(ts.textPart(symbolKind));
displayParts.push(ts.punctuationPart(17));
displayParts.push(ts.spacePart());
if (useConstructSignatures) {
displayParts.push(ts.keywordPart(87));
displayParts.push(ts.spacePart());
}
addFullSymbolName(symbol);
}
else {
addPrefixForAnyFunctionOrVar(symbol, symbolKind);
}
switch (symbolKind) {
case ScriptElementKind.memberVariableElement:
case ScriptElementKind.variableElement:
case ScriptElementKind.constElement:
case ScriptElementKind.letElement:
case ScriptElementKind.parameterElement:
case ScriptElementKind.localVariableElement:
displayParts.push(ts.punctuationPart(51));
displayParts.push(ts.spacePart());
if (useConstructSignatures) {
displayParts.push(ts.keywordPart(87));
displayParts.push(ts.spacePart());
}
if (!(type.flags & 32768)) {
displayParts.push.apply(displayParts, ts.symbolToDisplayParts(typeResolver, type.symbol, enclosingDeclaration, undefined, 1));
}
addSignatureDisplayParts(signature, allSignatures, 8);
break;
default:
addSignatureDisplayParts(signature, allSignatures);
}
hasAddedSymbolInfo = true;
}
}
else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304)) ||
(location.kind === 112 && location.parent.kind === 131)) {
var signature;
var functionDeclaration = location.parent;
var allSignatures = functionDeclaration.kind === 131 ? type.getConstructSignatures() : type.getCallSignatures();
if (!typeResolver.isImplementationOfOverload(functionDeclaration)) {
signature = typeResolver.getSignatureFromDeclaration(functionDeclaration);
}
else {
signature = allSignatures[0];
}
if (functionDeclaration.kind === 131) {
symbolKind = ScriptElementKind.constructorImplementationElement;
addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
}
else {
addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 134 &&
!(type.symbol.flags & 2048 || type.symbol.flags & 4096) ? type.symbol : symbol, symbolKind);
}
addSignatureDisplayParts(signature, allSignatures);
hasAddedSymbolInfo = true;
}
}
}
if (symbolFlags & 32 && !hasAddedSymbolInfo) {
displayParts.push(ts.keywordPart(68));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
writeTypeParametersOfSymbol(symbol, sourceFile);
}
if ((symbolFlags & 64) && (semanticMeaning & 2)) {
addNewLineIfDisplayPartsExist();
displayParts.push(ts.keywordPart(102));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
writeTypeParametersOfSymbol(symbol, sourceFile);
}
if (symbolFlags & 524288) {
addNewLineIfDisplayPartsExist();
displayParts.push(ts.keywordPart(121));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
displayParts.push(ts.spacePart());
displayParts.push(ts.operatorPart(52));
displayParts.push(ts.spacePart());
displayParts.push.apply(displayParts, ts.typeToDisplayParts(typeResolver, typeResolver.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration));
}
if (symbolFlags & 384) {
addNewLineIfDisplayPartsExist();
if (ts.forEach(symbol.declarations, ts.isConstEnumDeclaration)) {
displayParts.push(ts.keywordPart(69));
displayParts.push(ts.spacePart());
}
displayParts.push(ts.keywordPart(76));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
}
if (symbolFlags & 1536) {
addNewLineIfDisplayPartsExist();
displayParts.push(ts.keywordPart(115));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
}
if ((symbolFlags & 262144) && (semanticMeaning & 2)) {
addNewLineIfDisplayPartsExist();
displayParts.push(ts.punctuationPart(16));
displayParts.push(ts.textPart("type parameter"));
displayParts.push(ts.punctuationPart(17));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
displayParts.push(ts.spacePart());
displayParts.push(ts.keywordPart(85));
displayParts.push(ts.spacePart());
if (symbol.parent) {
addFullSymbolName(symbol.parent, enclosingDeclaration);
writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration);
}
else {
var signatureDeclaration = ts.getDeclarationOfKind(symbol, 125).parent;
var signature = typeResolver.getSignatureFromDeclaration(signatureDeclaration);
if (signatureDeclaration.kind === 135) {
displayParts.push(ts.keywordPart(87));
displayParts.push(ts.spacePart());
}
else if (signatureDeclaration.kind !== 134 && signatureDeclaration.name) {
addFullSymbolName(signatureDeclaration.symbol);
}
displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, sourceFile, 32));
}
}
if (symbolFlags & 8) {
addPrefixForAnyFunctionOrVar(symbol, "enum member");
var declaration = symbol.declarations[0];
if (declaration.kind === 209) {
var constantValue = typeResolver.getConstantValue(declaration);
if (constantValue !== undefined) {
displayParts.push(ts.spacePart());
displayParts.push(ts.operatorPart(52));
displayParts.push(ts.spacePart());
displayParts.push(ts.displayPart(constantValue.toString(), 7));
}
}
}
if (symbolFlags & 8388608) {
addNewLineIfDisplayPartsExist();
displayParts.push(ts.keywordPart(84));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
ts.forEach(symbol.declarations, function (declaration) {
if (declaration.kind === 200) {
var importDeclaration = declaration;
if (ts.isExternalModuleImportDeclaration(importDeclaration)) {
displayParts.push(ts.spacePart());
displayParts.push(ts.operatorPart(52));
displayParts.push(ts.spacePart());
displayParts.push(ts.keywordPart(116));
displayParts.push(ts.punctuationPart(16));
displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportDeclarationExpression(importDeclaration)), 8));
displayParts.push(ts.punctuationPart(17));
}
else {
var internalAliasSymbol = typeResolver.getSymbolAtLocation(importDeclaration.moduleReference);
if (internalAliasSymbol) {
displayParts.push(ts.spacePart());
displayParts.push(ts.operatorPart(52));
displayParts.push(ts.spacePart());
addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
}
}
return true;
}
});
}
if (!hasAddedSymbolInfo) {
if (symbolKind !== ScriptElementKind.unknown) {
if (type) {
addPrefixForAnyFunctionOrVar(symbol, symbolKind);
if (symbolKind === ScriptElementKind.memberVariableElement ||
symbolFlags & 3 ||
symbolKind === ScriptElementKind.localVariableElement) {
displayParts.push(ts.punctuationPart(51));
displayParts.push(ts.spacePart());
if (type.symbol && type.symbol.flags & 262144) {
var typeParameterParts = ts.mapToDisplayParts(function (writer) {
typeResolver.getSymbolDisplayBuilder().buildTypeParameterDisplay(type, writer, enclosingDeclaration);
});
displayParts.push.apply(displayParts, typeParameterParts);
}
else {
displayParts.push.apply(displayParts, ts.typeToDisplayParts(typeResolver, type, enclosingDeclaration));
}
}
else if (symbolFlags & 16 ||
symbolFlags & 8192 ||
symbolFlags & 16384 ||
symbolFlags & 131072 ||
symbolFlags & 98304 ||
symbolKind === ScriptElementKind.memberFunctionElement) {
var allSignatures = type.getCallSignatures();
addSignatureDisplayParts(allSignatures[0], allSignatures);
}
}
}
else {
symbolKind = getSymbolKind(symbol, typeResolver, location);
}
}
if (!documentation) {
documentation = symbol.getDocumentationComment();
}
return { displayParts: displayParts, documentation: documentation, symbolKind: symbolKind };
function addNewLineIfDisplayPartsExist() {
if (displayParts.length) {
displayParts.push(ts.lineBreakPart());
}
}
function addFullSymbolName(symbol, enclosingDeclaration) {
var fullSymbolDisplayParts = ts.symbolToDisplayParts(typeResolver, symbol, enclosingDeclaration || sourceFile, undefined, 1 | 2);
displayParts.push.apply(displayParts, fullSymbolDisplayParts);
}
function addPrefixForAnyFunctionOrVar(symbol, symbolKind) {
addNewLineIfDisplayPartsExist();
if (symbolKind) {
displayParts.push(ts.punctuationPart(16));
displayParts.push(ts.textPart(symbolKind));
displayParts.push(ts.punctuationPart(17));
displayParts.push(ts.spacePart());
addFullSymbolName(symbol);
}
}
function addSignatureDisplayParts(signature, allSignatures, flags) {
displayParts.push.apply(displayParts, ts.signatureToDisplayParts(typeResolver, signature, enclosingDeclaration, flags | 32));
if (allSignatures.length > 1) {
displayParts.push(ts.spacePart());
displayParts.push(ts.punctuationPart(16));
displayParts.push(ts.operatorPart(33));
displayParts.push(ts.displayPart((allSignatures.length - 1).toString(), 7));
displayParts.push(ts.spacePart());
displayParts.push(ts.textPart(allSignatures.length === 2 ? "overload" : "overloads"));
displayParts.push(ts.punctuationPart(17));
}
documentation = signature.getDocumentationComment();
}
function writeTypeParametersOfSymbol(symbol, enclosingDeclaration) {
var typeParameterParts = ts.mapToDisplayParts(function (writer) {
typeResolver.getSymbolDisplayBuilder().buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration);
});
displayParts.push.apply(displayParts, typeParameterParts);
}
}
function getQuickInfoAtPosition(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (!symbol) {
switch (node.kind) {
case 64:
case 151:
case 123:
case 92:
case 90:
var type = typeInfoResolver.getTypeAtLocation(node);
if (type) {
return {
kind: ScriptElementKind.unknown,
kindModifiers: ScriptElementKindModifier.none,
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
displayParts: ts.typeToDisplayParts(typeInfoResolver, type, getContainerNode(node)),
documentation: type.symbol ? type.symbol.getDocumentationComment() : undefined
};
}
}
return undefined;
}
var displayPartsDocumentationsAndKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, getContainerNode(node), typeInfoResolver, node);
return {
kind: displayPartsDocumentationsAndKind.symbolKind,
kindModifiers: getSymbolModifiers(symbol),
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
displayParts: displayPartsDocumentationsAndKind.displayParts,
documentation: displayPartsDocumentationsAndKind.documentation
};
}
function getDefinitionAtPosition(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
if (isJumpStatementTarget(node)) {
var labelName = node.text;
var label = getTargetLabel(node.parent, node.text);
return label ? [getDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined;
}
var comment = ts.forEach(sourceFile.referencedFiles, function (r) { return (r.pos <= position && position < r.end) ? r : undefined; });
if (comment) {
var referenceFile = ts.tryResolveScriptReference(program, sourceFile, comment);
if (referenceFile) {
return [{
fileName: referenceFile.fileName,
textSpan: ts.createTextSpanFromBounds(0, 0),
kind: ScriptElementKind.scriptElement,
name: comment.fileName,
containerName: undefined,
containerKind: undefined
}];
}
return undefined;
}
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (!symbol) {
return undefined;
}
var result = [];
if (node.parent.kind === 208) {
var shorthandSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
var shorthandDeclarations = shorthandSymbol.getDeclarations();
var shorthandSymbolKind = getSymbolKind(shorthandSymbol, typeInfoResolver, node);
var shorthandSymbolName = typeInfoResolver.symbolToString(shorthandSymbol);
var shorthandContainerName = typeInfoResolver.symbolToString(symbol.parent, node);
ts.forEach(shorthandDeclarations, function (declaration) {
result.push(getDefinitionInfo(declaration, shorthandSymbolKind, shorthandSymbolName, shorthandContainerName));
});
return result;
}
var declarations = symbol.getDeclarations();
var symbolName = typeInfoResolver.symbolToString(symbol);
var symbolKind = getSymbolKind(symbol, typeInfoResolver, node);
var containerSymbol = symbol.parent;
var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : "";
if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) &&
!tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) {
ts.forEach(declarations, function (declaration) {
result.push(getDefinitionInfo(declaration, symbolKind, symbolName, containerName));
});
}
return result;
function getDefinitionInfo(node, symbolKind, symbolName, containerName) {
return {
fileName: node.getSourceFile().fileName,
textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()),
kind: symbolKind,
name: symbolName,
containerKind: undefined,
containerName: containerName
};
}
function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) {
var declarations = [];
var definition;
ts.forEach(signatureDeclarations, function (d) {
if ((selectConstructors && d.kind === 131) ||
(!selectConstructors && (d.kind === 193 || d.kind === 130 || d.kind === 129))) {
declarations.push(d);
if (d.body)
definition = d;
}
});
if (definition) {
result.push(getDefinitionInfo(definition, symbolKind, symbolName, containerName));
return true;
}
else if (declarations.length) {
result.push(getDefinitionInfo(declarations[declarations.length - 1], symbolKind, symbolName, containerName));
return true;
}
return false;
}
function tryAddConstructSignature(symbol, location, symbolKind, symbolName, containerName, result) {
if (isNewExpressionTarget(location) || location.kind === 112) {
if (symbol.flags & 32) {
var classDeclaration = symbol.getDeclarations()[0];
ts.Debug.assert(classDeclaration && classDeclaration.kind === 194);
return tryAddSignature(classDeclaration.members, true, symbolKind, symbolName, containerName, result);
}
}
return false;
}
function tryAddCallSignature(symbol, location, symbolKind, symbolName, containerName, result) {
if (isCallExpressionTarget(location) || isNewExpressionTarget(location) || isNameOfFunctionDeclaration(location)) {
return tryAddSignature(symbol.declarations, false, symbolKind, symbolName, containerName, result);
}
return false;
}
}
function getOccurrencesAtPosition(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var node = ts.getTouchingWord(sourceFile, position);
if (!node) {
return undefined;
}
if (node.kind === 64 || node.kind === 92 || node.kind === 90 ||
isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) {
return getReferencesForNode(node, [sourceFile], true, false, false);
}
switch (node.kind) {
case 83:
case 75:
if (hasKind(node.parent, 176)) {
return getIfElseOccurrences(node.parent);
}
break;
case 89:
if (hasKind(node.parent, 184)) {
return getReturnOccurrences(node.parent);
}
break;
case 93:
if (hasKind(node.parent, 188)) {
return getThrowOccurrences(node.parent);
}
break;
case 67:
if (hasKind(parent(parent(node)), 189)) {
return getTryCatchFinallyOccurrences(node.parent.parent);
}
break;
case 95:
case 80:
if (hasKind(parent(node), 189)) {
return getTryCatchFinallyOccurrences(node.parent);
}
break;
case 91:
if (hasKind(node.parent, 186)) {
return getSwitchCaseDefaultOccurrences(node.parent);
}
break;
case 66:
case 72:
if (hasKind(parent(parent(node)), 186)) {
return getSwitchCaseDefaultOccurrences(node.parent.parent);
}
break;
case 65:
case 70:
if (hasKind(node.parent, 183) || hasKind(node.parent, 182)) {
return getBreakOrContinueStatementOccurences(node.parent);
}
break;
case 81:
if (hasKind(node.parent, 179) ||
hasKind(node.parent, 180) ||
hasKind(node.parent, 181)) {
return getLoopBreakContinueOccurrences(node.parent);
}
break;
case 99:
case 74:
if (hasKind(node.parent, 178) || hasKind(node.parent, 177)) {
return getLoopBreakContinueOccurrences(node.parent);
}
break;
case 112:
if (hasKind(node.parent, 131)) {
return getConstructorOccurrences(node.parent);
}
break;
case 114:
case 118:
if (hasKind(node.parent, 132) || hasKind(node.parent, 133)) {
return getGetAndSetOccurrences(node.parent);
}
default:
if (ts.isModifier(node.kind) && node.parent &&
(ts.isDeclaration(node.parent) || node.parent.kind === 173)) {
return getModifierOccurrences(node.kind, node.parent);
}
}
return undefined;
function getIfElseOccurrences(ifStatement) {
var keywords = [];
while (hasKind(ifStatement.parent, 176) && ifStatement.parent.elseStatement === ifStatement) {
ifStatement = ifStatement.parent;
}
while (ifStatement) {
var children = ifStatement.getChildren();
pushKeywordIf(keywords, children[0], 83);
for (var i = children.length - 1; i >= 0; i--) {
if (pushKeywordIf(keywords, children[i], 75)) {
break;
}
}
if (!hasKind(ifStatement.elseStatement, 176)) {
break;
}
ifStatement = ifStatement.elseStatement;
}
var result = [];
for (var i = 0; i < keywords.length; i++) {
if (keywords[i].kind === 75 && i < keywords.length - 1) {
var elseKeyword = keywords[i];
var ifKeyword = keywords[i + 1];
var shouldHighlightNextKeyword = true;
for (var j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) {
if (!ts.isWhiteSpace(sourceFile.text.charCodeAt(j))) {
shouldHighlightNextKeyword = false;
break;
}
}
if (shouldHighlightNextKeyword) {
result.push({
fileName: fileName,
textSpan: ts.createTextSpanFromBounds(elseKeyword.getStart(), ifKeyword.end),
isWriteAccess: false
});
i++;
continue;
}
}
result.push(getReferenceEntryFromNode(keywords[i]));
}
return result;
}
function getReturnOccurrences(returnStatement) {
var func = ts.getContainingFunction(returnStatement);
if (!(func && hasKind(func.body, 172))) {
return undefined;
}
var keywords = [];
ts.forEachReturnStatement(func.body, function (returnStatement) {
pushKeywordIf(keywords, returnStatement.getFirstToken(), 89);
});
ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
pushKeywordIf(keywords, throwStatement.getFirstToken(), 93);
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getThrowOccurrences(throwStatement) {
var owner = getThrowStatementOwner(throwStatement);
if (!owner) {
return undefined;
}
var keywords = [];
ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
pushKeywordIf(keywords, throwStatement.getFirstToken(), 93);
});
if (ts.isFunctionBlock(owner)) {
ts.forEachReturnStatement(owner, function (returnStatement) {
pushKeywordIf(keywords, returnStatement.getFirstToken(), 89);
});
}
return ts.map(keywords, getReferenceEntryFromNode);
}
function aggregateOwnedThrowStatements(node) {
var statementAccumulator = [];
aggregate(node);
return statementAccumulator;
function aggregate(node) {
if (node.kind === 188) {
statementAccumulator.push(node);
}
else if (node.kind === 189) {
var tryStatement = node;
if (tryStatement.catchClause) {
aggregate(tryStatement.catchClause);
}
else {
aggregate(tryStatement.tryBlock);
}
if (tryStatement.finallyBlock) {
aggregate(tryStatement.finallyBlock);
}
}
else if (!ts.isAnyFunction(node)) {
ts.forEachChild(node, aggregate);
}
}
;
}
function getThrowStatementOwner(throwStatement) {
var child = throwStatement;
while (child.parent) {
var parent = child.parent;
if (ts.isFunctionBlock(parent) || parent.kind === 210) {
return parent;
}
if (parent.kind === 189) {
var tryStatement = parent;
if (tryStatement.tryBlock === child && tryStatement.catchClause) {
return child;
}
}
child = parent;
}
return undefined;
}
function getTryCatchFinallyOccurrences(tryStatement) {
var keywords = [];
pushKeywordIf(keywords, tryStatement.getFirstToken(), 95);
if (tryStatement.catchClause) {
pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 67);
}
if (tryStatement.finallyBlock) {
var finallyKeyword = ts.findChildOfKind(tryStatement, 80, sourceFile);
pushKeywordIf(keywords, finallyKeyword, 80);
}
return ts.map(keywords, getReferenceEntryFromNode);
}
function getLoopBreakContinueOccurrences(loopNode) {
var keywords = [];
if (pushKeywordIf(keywords, loopNode.getFirstToken(), 81, 99, 74)) {
if (loopNode.kind === 177) {
var loopTokens = loopNode.getChildren();
for (var i = loopTokens.length - 1; i >= 0; i--) {
if (pushKeywordIf(keywords, loopTokens[i], 99)) {
break;
}
}
}
}
var breaksAndContinues = aggregateAllBreakAndContinueStatements(loopNode.statement);
ts.forEach(breaksAndContinues, function (statement) {
if (ownsBreakOrContinueStatement(loopNode, statement)) {
pushKeywordIf(keywords, statement.getFirstToken(), 65, 70);
}
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getSwitchCaseDefaultOccurrences(switchStatement) {
var keywords = [];
pushKeywordIf(keywords, switchStatement.getFirstToken(), 91);
ts.forEach(switchStatement.clauses, function (clause) {
pushKeywordIf(keywords, clause.getFirstToken(), 66, 72);
var breaksAndContinues = aggregateAllBreakAndContinueStatements(clause);
ts.forEach(breaksAndContinues, function (statement) {
if (ownsBreakOrContinueStatement(switchStatement, statement)) {
pushKeywordIf(keywords, statement.getFirstToken(), 65);
}
});
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getBreakOrContinueStatementOccurences(breakOrContinueStatement) {
var owner = getBreakOrContinueOwner(breakOrContinueStatement);
if (owner) {
switch (owner.kind) {
case 179:
case 180:
case 181:
case 177:
case 178:
return getLoopBreakContinueOccurrences(owner);
case 186:
return getSwitchCaseDefaultOccurrences(owner);
}
}
return undefined;
}
function aggregateAllBreakAndContinueStatements(node) {
var statementAccumulator = [];
aggregate(node);
return statementAccumulator;
function aggregate(node) {
if (node.kind === 183 || node.kind === 182) {
statementAccumulator.push(node);
}
else if (!ts.isAnyFunction(node)) {
ts.forEachChild(node, aggregate);
}
}
;
}
function ownsBreakOrContinueStatement(owner, statement) {
var actualOwner = getBreakOrContinueOwner(statement);
return actualOwner && actualOwner === owner;
}
function getBreakOrContinueOwner(statement) {
for (var node = statement.parent; node; node = node.parent) {
switch (node.kind) {
case 186:
if (statement.kind === 182) {
continue;
}
case 179:
case 180:
case 181:
case 178:
case 177:
if (!statement.label || isLabeledBy(node, statement.label.text)) {
return node;
}
break;
default:
if (ts.isAnyFunction(node)) {
return undefined;
}
break;
}
}
return undefined;
}
function getConstructorOccurrences(constructorDeclaration) {
var declarations = constructorDeclaration.symbol.getDeclarations();
var keywords = [];
ts.forEach(declarations, function (declaration) {
ts.forEach(declaration.getChildren(), function (token) {
return pushKeywordIf(keywords, token, 112);
});
});
return ts.map(keywords, getReferenceEntryFromNode);
}
function getGetAndSetOccurrences(accessorDeclaration) {
var keywords = [];
tryPushAccessorKeyword(accessorDeclaration.symbol, 132);
tryPushAccessorKeyword(accessorDeclaration.symbol, 133);
return ts.map(keywords, getReferenceEntryFromNode);
function tryPushAccessorKeyword(accessorSymbol, accessorKind) {
var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind);
if (accessor) {
ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 114, 118); });
}
}
}
function getModifierOccurrences(modifier, declaration) {
var container = declaration.parent;
if (declaration.flags & 112) {
if (!(container.kind === 194 ||
(declaration.kind === 126 && hasKind(container, 131)))) {
return undefined;
}
}
else if (declaration.flags & 128) {
if (container.kind !== 194) {
return undefined;
}
}
else if (declaration.flags & (1 | 2)) {
if (!(container.kind === 199 || container.kind === 210)) {
return undefined;
}
}
else {
return undefined;
}
var keywords = [];
var modifierFlag = getFlagFromModifier(modifier);
var nodes;
switch (container.kind) {
case 199:
case 210:
nodes = container.statements;
break;
case 131:
nodes = container.parameters.concat(container.parent.members);
break;
case 194:
nodes = container.members;
if (modifierFlag & 112) {
var constructor = ts.forEach(container.members, function (member) {
return member.kind === 131 && member;
});
if (constructor) {
nodes = nodes.concat(constructor.parameters);
}
}
break;
default:
ts.Debug.fail("Invalid container kind.");
}
ts.forEach(nodes, function (node) {
if (node.modifiers && node.flags & modifierFlag) {
ts.forEach(node.modifiers, function (child) { return pushKeywordIf(keywords, child, modifier); });
}
});
return ts.map(keywords, getReferenceEntryFromNode);
function getFlagFromModifier(modifier) {
switch (modifier) {
case 107:
return 16;
case 105:
return 32;
case 106:
return 64;
case 108:
return 128;
case 77:
return 1;
case 113:
return 2;
default:
ts.Debug.fail();
}
}
}
function hasKind(node, kind) {
return node !== undefined && node.kind === kind;
}
function parent(node) {
return node && node.parent;
}
function pushKeywordIf(keywordList, token) {
var expected = [];
for (var _i = 2; _i < arguments.length; _i++) {
expected[_i - 2] = arguments[_i];
}
if (token && ts.contains(expected, token.kind)) {
keywordList.push(token);
return true;
}
return false;
}
}
function findRenameLocations(fileName, position, findInStrings, findInComments) {
return findReferences(fileName, position, findInStrings, findInComments);
}
function getReferencesAtPosition(fileName, position) {
return findReferences(fileName, position, false, false);
}
function findReferences(fileName, position, findInStrings, findInComments) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var node = ts.getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
if (node.kind !== 64 &&
!isLiteralNameOfPropertyDeclarationOrIndexAccess(node) &&
!isNameOfExternalModuleImportOrDeclaration(node)) {
return undefined;
}
ts.Debug.assert(node.kind === 64 || node.kind === 7 || node.kind === 8);
return getReferencesForNode(node, program.getSourceFiles(), false, findInStrings, findInComments);
}
function initializeNameTable(sourceFile) {
var nameTable = {};
walk(sourceFile);
sourceFile.nameTable = nameTable;
function walk(node) {
switch (node.kind) {
case 64:
nameTable[node.text] = node.text;
break;
case 8:
case 7:
nameTable[node.text] = node.text;
break;
default:
ts.forEachChild(node, walk);
}
}
}
function getReferencesForNode(node, sourceFiles, searchOnlyInCurrentFile, findInStrings, findInComments) {
if (isLabelName(node)) {
if (isJumpStatementTarget(node)) {
var labelDefinition = getTargetLabel(node.parent, node.text);
return labelDefinition ? getLabelReferencesInNode(labelDefinition.parent, labelDefinition) : [getReferenceEntryFromNode(node)];
}
else {
return getLabelReferencesInNode(node.parent, node);
}
}
if (node.kind === 92) {
return getReferencesForThisKeyword(node, sourceFiles);
}
if (node.kind === 90) {
return getReferencesForSuperKeyword(node);
}
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (!symbol) {
return [getReferenceEntryFromNode(node)];
}
var declarations = symbol.declarations;
if (!declarations || !declarations.length) {
return undefined;
}
var result;
var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), declarations);
var declaredName = getDeclaredName(symbol);
var scope = getSymbolScope(symbol);
if (scope) {
result = [];
getReferencesInNode(scope, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result);
}
else {
if (searchOnlyInCurrentFile) {
ts.Debug.assert(sourceFiles.length === 1);
result = [];
getReferencesInNode(sourceFiles[0], symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result);
}
else {
var internedName = getInternedName(symbol, declarations);
ts.forEach(sourceFiles, function (sourceFile) {
cancellationToken.throwIfCancellationRequested();
if (!sourceFile.nameTable) {
initializeNameTable(sourceFile);
}
ts.Debug.assert(sourceFile.nameTable !== undefined);
if (ts.lookUp(sourceFile.nameTable, internedName)) {
result = result || [];
getReferencesInNode(sourceFile, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result);
}
});
}
}
return result;
function getDeclaredName(symbol) {
var name = typeInfoResolver.symbolToString(symbol);
return stripQuotes(name);
}
function getInternedName(symbol, declarations) {
var functionExpression = ts.forEach(declarations, function (d) { return d.kind === 158 ? d : undefined; });
if (functionExpression && functionExpression.name) {
var name = functionExpression.name.text;
}
else {
var name = symbol.name;
}
return stripQuotes(name);
}
function stripQuotes(name) {
var length = name.length;
if (length >= 2 && name.charCodeAt(0) === 34 && name.charCodeAt(length - 1) === 34) {
return name.substring(1, length - 1);
}
;
return name;
}
function getSymbolScope(symbol) {
if (symbol.getFlags() && (4 | 8192)) {
var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 32) ? d : undefined; });
if (privateDeclaration) {
return ts.getAncestor(privateDeclaration, 194);
}
}
if (symbol.parent || (symbol.getFlags() & 268435456)) {
return undefined;
}
var scope = undefined;
var declarations = symbol.getDeclarations();
if (declarations) {
for (var i = 0, n = declarations.length; i < n; i++) {
var container = getContainerNode(declarations[i]);
if (!container) {
return undefined;
}
if (scope && scope !== container) {
return undefined;
}
if (container.kind === 210 && !ts.isExternalModule(container)) {
return undefined;
}
scope = container;
}
}
return scope;
}
function getPossibleSymbolReferencePositions(sourceFile, symbolName, start, end) {
var positions = [];
if (!symbolName || !symbolName.length) {
return positions;
}
var text = sourceFile.text;
var sourceLength = text.length;
var symbolNameLength = symbolName.length;
var position = text.indexOf(symbolName, start);
while (position >= 0) {
cancellationToken.throwIfCancellationRequested();
if (position > end)
break;
var endPosition = position + symbolNameLength;
if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 2)) &&
(endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 2))) {
positions.push(position);
}
position = text.indexOf(symbolName, position + symbolNameLength + 1);
}
return positions;
}
function getLabelReferencesInNode(container, targetLabel) {
var result = [];
var sourceFile = container.getSourceFile();
var labelName = targetLabel.text;
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, labelName, container.getStart(), container.getEnd());
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.getWidth() !== labelName.length) {
return;
}
if (node === targetLabel ||
(isJumpStatementTarget(node) && getTargetLabel(node, labelName) === targetLabel)) {
result.push(getReferenceEntryFromNode(node));
}
});
return result;
}
function isValidReferencePosition(node, searchSymbolName) {
if (node) {
switch (node.kind) {
case 64:
return node.getWidth() === searchSymbolName.length;
case 8:
if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node) ||
isNameOfExternalModuleImportOrDeclaration(node)) {
return node.getWidth() === searchSymbolName.length + 2;
}
break;
case 7:
if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) {
return node.getWidth() === searchSymbolName.length;
}
break;
}
}
return false;
}
function getReferencesInNode(container, searchSymbol, searchText, searchLocation, searchMeaning, findInStrings, findInComments, result) {
var sourceFile = container.getSourceFile();
var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*</;
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, searchText, container.getStart(), container.getEnd());
if (possiblePositions.length) {
var searchSymbols = populateSearchSymbolSet(searchSymbol, searchLocation);
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var referenceLocation = ts.getTouchingPropertyName(sourceFile, position);
if (!isValidReferencePosition(referenceLocation, searchText)) {
if ((findInStrings && isInString(position)) ||
(findInComments && isInComment(position))) {
result.push({
fileName: sourceFile.fileName,
textSpan: ts.createTextSpan(position, searchText.length),
isWriteAccess: false
});
}
return;
}
if (!(getMeaningFromLocation(referenceLocation) & searchMeaning)) {
return;
}
var referenceSymbol = typeInfoResolver.getSymbolAtLocation(referenceLocation);
if (referenceSymbol) {
var referenceSymbolDeclaration = referenceSymbol.valueDeclaration;
var shorthandValueSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(referenceSymbolDeclaration);
if (isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation)) {
result.push(getReferenceEntryFromNode(referenceLocation));
}
else if (!(referenceSymbol.flags & 67108864) && searchSymbols.indexOf(shorthandValueSymbol) >= 0) {
result.push(getReferenceEntryFromNode(referenceSymbolDeclaration.name));
}
}
});
}
function isInString(position) {
var token = ts.getTokenAtPosition(sourceFile, position);
return token && token.kind === 8 && position > token.getStart();
}
function isInComment(position) {
var token = ts.getTokenAtPosition(sourceFile, position);
if (token && position < token.getStart()) {
var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos);
return ts.forEach(commentRanges, function (c) {
if (c.pos < position && position < c.end) {
var commentText = sourceFile.text.substring(c.pos, c.end);
if (!tripleSlashDirectivePrefixRegex.test(commentText)) {
return true;
}
}
});
}
return false;
}
}
function getReferencesForSuperKeyword(superKeyword) {
var searchSpaceNode = ts.getSuperContainer(superKeyword, false);
if (!searchSpaceNode) {
return undefined;
}
var staticFlag = 128;
switch (searchSpaceNode.kind) {
case 128:
case 127:
case 130:
case 129:
case 131:
case 132:
case 133:
staticFlag &= searchSpaceNode.flags;
searchSpaceNode = searchSpaceNode.parent;
break;
default:
return undefined;
}
var result = [];
var sourceFile = searchSpaceNode.getSourceFile();
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "super", searchSpaceNode.getStart(), searchSpaceNode.getEnd());
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.kind !== 90) {
return;
}
var container = ts.getSuperContainer(node, false);
if (container && (128 & container.flags) === staticFlag && container.parent.symbol === searchSpaceNode.symbol) {
result.push(getReferenceEntryFromNode(node));
}
});
return result;
}
function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles) {
var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false);
var staticFlag = 128;
switch (searchSpaceNode.kind) {
case 130:
case 129:
if (ts.isObjectLiteralMethod(searchSpaceNode)) {
break;
}
case 128:
case 127:
case 131:
case 132:
case 133:
staticFlag &= searchSpaceNode.flags;
searchSpaceNode = searchSpaceNode.parent;
break;
case 210:
if (ts.isExternalModule(searchSpaceNode)) {
return undefined;
}
case 193:
case 158:
break;
default:
return undefined;
}
var result = [];
if (searchSpaceNode.kind === 210) {
ts.forEach(sourceFiles, function (sourceFile) {
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd());
getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, result);
});
}
else {
var sourceFile = searchSpaceNode.getSourceFile();
var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", searchSpaceNode.getStart(), searchSpaceNode.getEnd());
getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result);
}
return result;
function getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result) {
ts.forEach(possiblePositions, function (position) {
cancellationToken.throwIfCancellationRequested();
var node = ts.getTouchingWord(sourceFile, position);
if (!node || node.kind !== 92) {
return;
}
var container = ts.getThisContainer(node, false);
switch (searchSpaceNode.kind) {
case 158:
case 193:
if (searchSpaceNode.symbol === container.symbol) {
result.push(getReferenceEntryFromNode(node));
}
break;
case 130:
case 129:
if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) {
result.push(getReferenceEntryFromNode(node));
}
break;
case 194:
if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 128) === staticFlag) {
result.push(getReferenceEntryFromNode(node));
}
break;
case 210:
if (container.kind === 210 && !ts.isExternalModule(container)) {
result.push(getReferenceEntryFromNode(node));
}
break;
}
});
}
}
function populateSearchSymbolSet(symbol, location) {
var result = [symbol];
if (isNameOfPropertyAssignment(location)) {
ts.forEach(getPropertySymbolsFromContextualType(location), function (contextualSymbol) {
result.push.apply(result, typeInfoResolver.getRootSymbols(contextualSymbol));
});
var shorthandValueSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(location.parent);
if (shorthandValueSymbol) {
result.push(shorthandValueSymbol);
}
}
ts.forEach(typeInfoResolver.getRootSymbols(symbol), function (rootSymbol) {
if (rootSymbol !== symbol) {
result.push(rootSymbol);
}
if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) {
getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result);
}
});
return result;
}
function getPropertySymbolsFromBaseTypes(symbol, propertyName, result) {
if (symbol && symbol.flags & (32 | 64)) {
ts.forEach(symbol.getDeclarations(), function (declaration) {
if (declaration.kind === 194) {
getPropertySymbolFromTypeReference(ts.getClassBaseTypeNode(declaration));
ts.forEach(ts.getClassImplementedTypeNodes(declaration), getPropertySymbolFromTypeReference);
}
else if (declaration.kind === 195) {
ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference);
}
});
}
return;
function getPropertySymbolFromTypeReference(typeReference) {
if (typeReference) {
var type = typeInfoResolver.getTypeAtLocation(typeReference);
if (type) {
var propertySymbol = typeInfoResolver.getPropertyOfType(type, propertyName);
if (propertySymbol) {
result.push(propertySymbol);
}
getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result);
}
}
}
}
function isRelatableToSearchSet(searchSymbols, referenceSymbol, referenceLocation) {
if (searchSymbols.indexOf(referenceSymbol) >= 0) {
return true;
}
if (isNameOfPropertyAssignment(referenceLocation)) {
return ts.forEach(getPropertySymbolsFromContextualType(referenceLocation), function (contextualSymbol) {
return ts.forEach(typeInfoResolver.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0; });
});
}
return ts.forEach(typeInfoResolver.getRootSymbols(referenceSymbol), function (rootSymbol) {
if (searchSymbols.indexOf(rootSymbol) >= 0) {
return true;
}
if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) {
var result = [];
getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result);
return ts.forEach(result, function (s) { return searchSymbols.indexOf(s) >= 0; });
}
return false;
});
}
function getPropertySymbolsFromContextualType(node) {
if (isNameOfPropertyAssignment(node)) {
var objectLiteral = node.parent.parent;
var contextualType = typeInfoResolver.getContextualType(objectLiteral);
var name = node.text;
if (contextualType) {
if (contextualType.flags & 16384) {
var unionProperty = contextualType.getProperty(name);
if (unionProperty) {
return [unionProperty];
}
else {
var result = [];
ts.forEach(contextualType.types, function (t) {
var symbol = t.getProperty(name);
if (symbol) {
result.push(symbol);
}
});
return result;
}
}
else {
var symbol = contextualType.getProperty(name);
if (symbol) {
return [symbol];
}
}
}
}
return undefined;
}
function getIntersectingMeaningFromDeclarations(meaning, declarations) {
if (declarations) {
do {
var lastIterationMeaning = meaning;
for (var i = 0, n = declarations.length; i < n; i++) {
var declarationMeaning = getMeaningFromDeclaration(declarations[i]);
if (declarationMeaning & meaning) {
meaning |= declarationMeaning;
}
}
} while (meaning !== lastIterationMeaning);
}
return meaning;
}
}
function getReferenceEntryFromNode(node) {
var start = node.getStart();
var end = node.getEnd();
if (node.kind === 8) {
start += 1;
end -= 1;
}
return {
fileName: node.getSourceFile().fileName,
textSpan: ts.createTextSpanFromBounds(start, end),
isWriteAccess: isWriteAccess(node)
};
}
function isWriteAccess(node) {
if (node.kind === 64 && ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return true;
}
var parent = node.parent;
if (parent) {
if (parent.kind === 164 || parent.kind === 163) {
return true;
}
else if (parent.kind === 165 && parent.left === node) {
var operator = parent.operatorToken.kind;
return 52 <= operator && operator <= 63;
}
}
return false;
}
function getNavigateToItems(searchValue, maxResultCount) {
synchronizeHostData();
return ts.NavigateTo.getNavigateToItems(program, cancellationToken, searchValue, maxResultCount);
}
function containErrors(diagnostics) {
return ts.forEach(diagnostics, function (diagnostic) { return diagnostic.category === 1; });
}
function getEmitOutput(fileName) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var outputFiles = [];
function writeFile(fileName, data, writeByteOrderMark) {
outputFiles.push({
name: fileName,
writeByteOrderMark: writeByteOrderMark,
text: data
});
}
var emitOutput = program.emit(sourceFile, writeFile);
return {
outputFiles: outputFiles,
emitSkipped: emitOutput.emitSkipped
};
}
function getMeaningFromDeclaration(node) {
switch (node.kind) {
case 126:
case 191:
case 148:
case 128:
case 127:
case 207:
case 208:
case 209:
case 130:
case 129:
case 131:
case 132:
case 133:
case 193:
case 158:
case 159:
case 206:
return 1;
case 125:
case 195:
case 196:
case 141:
return 2;
case 194:
case 197:
return 1 | 2;
case 198:
if (node.name.kind === 8) {
return 4 | 1;
}
else if (ts.getModuleInstanceState(node) === 1) {
return 4 | 1;
}
else {
return 4;
}
case 200:
return 1 | 2 | 4;
case 210:
return 4 | 1;
}
ts.Debug.fail("Unknown declaration type");
}
function isTypeReference(node) {
if (isRightSideOfQualifiedName(node)) {
node = node.parent;
}
return node.parent.kind === 137;
}
function isNamespaceReference(node) {
var root = node;
var isLastClause = true;
if (root.parent.kind === 123) {
while (root.parent && root.parent.kind === 123)
root = root.parent;
isLastClause = root.right === node;
}
return root.parent.kind === 137 && !isLastClause;
}
function isInRightSideOfImport(node) {
while (node.parent.kind === 123) {
node = node.parent;
}
return ts.isInternalModuleImportDeclaration(node.parent) && node.parent.moduleReference === node;
}
function getMeaningFromRightHandSideOfImport(node) {
ts.Debug.assert(node.kind === 64);
if (node.parent.kind === 123 &&
node.parent.right === node &&
node.parent.parent.kind === 200) {
return 1 | 2 | 4;
}
return 4;
}
function getMeaningFromLocation(node) {
if (node.parent.kind === 201) {
return 1 | 2 | 4;
}
else if (isInRightSideOfImport(node)) {
return getMeaningFromRightHandSideOfImport(node);
}
else if (ts.isDeclarationOrFunctionExpressionOrCatchVariableName(node)) {
return getMeaningFromDeclaration(node.parent);
}
else if (isTypeReference(node)) {
return 2;
}
else if (isNamespaceReference(node)) {
return 4;
}
else {
return 1;
}
}
function getSignatureHelpItems(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
return ts.SignatureHelp.getSignatureHelpItems(sourceFile, position, typeInfoResolver, cancellationToken);
}
function getCurrentSourceFile(fileName) {
fileName = ts.normalizeSlashes(fileName);
var currentSourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
return currentSourceFile;
}
function getNameOrDottedNameSpan(fileName, startPos, endPos) {
fileName = ts.normalizeSlashes(fileName);
var node = ts.getTouchingPropertyName(getCurrentSourceFile(fileName), startPos);
if (!node) {
return;
}
switch (node.kind) {
case 151:
case 123:
case 8:
case 79:
case 94:
case 88:
case 90:
case 92:
case 64:
break;
default:
return;
}
var nodeForStartPos = node;
while (true) {
if (isRightSideOfPropertyAccess(nodeForStartPos) || isRightSideOfQualifiedName(nodeForStartPos)) {
nodeForStartPos = nodeForStartPos.parent;
}
else if (isNameOfModuleDeclaration(nodeForStartPos)) {
if (nodeForStartPos.parent.parent.kind === 198 &&
nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
nodeForStartPos = nodeForStartPos.parent.parent.name;
}
else {
break;
}
}
else {
break;
}
}
return ts.createTextSpanFromBounds(nodeForStartPos.getStart(), node.getEnd());
}
function getBreakpointStatementAtPosition(fileName, position) {
fileName = ts.normalizeSlashes(fileName);
return ts.BreakpointResolver.spanInSourceFileAtLocation(getCurrentSourceFile(fileName), position);
}
function getNavigationBarItems(fileName) {
fileName = ts.normalizeSlashes(fileName);
return ts.NavigationBar.getNavigationBarItems(getCurrentSourceFile(fileName));
}
function getSemanticClassifications(fileName, span) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var result = [];
processNode(sourceFile);
return result;
function classifySymbol(symbol, meaningAtPosition) {
var flags = symbol.getFlags();
if (flags & 32) {
return ClassificationTypeNames.className;
}
else if (flags & 384) {
return ClassificationTypeNames.enumName;
}
else if (flags & 524288) {
return ClassificationTypeNames.typeAlias;
}
else if (meaningAtPosition & 2) {
if (flags & 64) {
return ClassificationTypeNames.interfaceName;
}
else if (flags & 262144) {
return ClassificationTypeNames.typeParameterName;
}
}
else if (flags & 1536) {
if (meaningAtPosition & 4 ||
(meaningAtPosition & 1 && hasValueSideModule(symbol))) {
return ClassificationTypeNames.moduleName;
}
}
return undefined;
function hasValueSideModule(symbol) {
return ts.forEach(symbol.declarations, function (declaration) {
return declaration.kind === 198 && ts.getModuleInstanceState(declaration) == 1;
});
}
}
function processNode(node) {
if (node && ts.textSpanIntersectsWith(span, node.getStart(), node.getWidth())) {
if (node.kind === 64 && node.getWidth() > 0) {
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (symbol) {
var type = classifySymbol(symbol, getMeaningFromLocation(node));
if (type) {
result.push({
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
classificationType: type
});
}
}
}
ts.forEachChild(node, processNode);
}
}
}
function getSyntacticClassifications(fileName, span) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
var triviaScanner = ts.createScanner(2, false, sourceFile.text);
var mergeConflictScanner = ts.createScanner(2, false, sourceFile.text);
var result = [];
processElement(sourceFile);
return result;
function classifyLeadingTrivia(token) {
var tokenStart = ts.skipTrivia(sourceFile.text, token.pos, false);
if (tokenStart === token.pos) {
return;
}
triviaScanner.setTextPos(token.pos);
while (true) {
var start = triviaScanner.getTextPos();
var kind = triviaScanner.scan();
var end = triviaScanner.getTextPos();
var width = end - start;
if (ts.textSpanIntersectsWith(span, start, width)) {
if (!ts.isTrivia(kind)) {
return;
}
if (ts.isComment(kind)) {
result.push({
textSpan: ts.createTextSpan(start, width),
classificationType: ClassificationTypeNames.comment
});
continue;
}
if (kind === 6) {
var text = sourceFile.text;
var ch = text.charCodeAt(start);
if (ch === 60 || ch === 62) {
result.push({
textSpan: ts.createTextSpan(start, width),
classificationType: ClassificationTypeNames.comment
});
continue;
}
ts.Debug.assert(ch === 61);
classifyDisabledMergeCode(text, start, end);
}
}
}
}
function classifyDisabledMergeCode(text, start, end) {
for (var i = start; i < end; i++) {
if (ts.isLineBreak(text.charCodeAt(i))) {
break;
}
}
result.push({
textSpan: ts.createTextSpanFromBounds(start, i),
classificationType: ClassificationTypeNames.comment
});
mergeConflictScanner.setTextPos(i);
while (mergeConflictScanner.getTextPos() < end) {
classifyDisabledCodeToken();
}
}
function classifyDisabledCodeToken() {
var start = mergeConflictScanner.getTextPos();
var tokenKind = mergeConflictScanner.scan();
var end = mergeConflictScanner.getTextPos();
var type = classifyTokenType(tokenKind);
if (type) {
result.push({
textSpan: ts.createTextSpanFromBounds(start, end),
classificationType: type
});
}
}
function classifyToken(token) {
classifyLeadingTrivia(token);
if (token.getWidth() > 0) {
var type = classifyTokenType(token.kind, token);
if (type) {
result.push({
textSpan: ts.createTextSpan(token.getStart(), token.getWidth()),
classificationType: type
});
}
}
}
function classifyTokenType(tokenKind, token) {
if (ts.isKeyword(tokenKind)) {
return ClassificationTypeNames.keyword;
}
if (tokenKind === 24 || tokenKind === 25) {
if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) {
return ClassificationTypeNames.punctuation;
}
}
if (ts.isPunctuation(tokenKind)) {
if (token) {
if (tokenKind === 52) {
if (token.parent.kind === 191 ||
token.parent.kind === 128 ||
token.parent.kind === 126) {
return ClassificationTypeNames.operator;
}
}
if (token.parent.kind === 165 ||
token.parent.kind === 163 ||
token.parent.kind === 164 ||
token.parent.kind === 166) {
return ClassificationTypeNames.operator;
}
}
return ClassificationTypeNames.punctuation;
}
else if (tokenKind === 7) {
return ClassificationTypeNames.numericLiteral;
}
else if (tokenKind === 8) {
return ClassificationTypeNames.stringLiteral;
}
else if (tokenKind === 9) {
return ClassificationTypeNames.stringLiteral;
}
else if (ts.isTemplateLiteralKind(tokenKind)) {
return ClassificationTypeNames.stringLiteral;
}
else if (tokenKind === 64) {
if (token) {
switch (token.parent.kind) {
case 194:
if (token.parent.name === token) {
return ClassificationTypeNames.className;
}
return;
case 125:
if (token.parent.name === token) {
return ClassificationTypeNames.typeParameterName;
}
return;
case 195:
if (token.parent.name === token) {
return ClassificationTypeNames.interfaceName;
}
return;
case 197:
if (token.parent.name === token) {
return ClassificationTypeNames.enumName;
}
return;
case 198:
if (token.parent.name === token) {
return ClassificationTypeNames.moduleName;
}
return;
}
}
return ClassificationTypeNames.text;
}
}
function processElement(element) {
if (ts.textSpanIntersectsWith(span, element.getFullStart(), element.getFullWidth())) {
var children = element.getChildren();
for (var i = 0, n = children.length; i < n; i++) {
var child = children[i];
if (ts.isToken(child)) {
classifyToken(child);
}
else {
processElement(child);
}
}
}
}
}
function getOutliningSpans(fileName) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
return ts.OutliningElementsCollector.collectElements(sourceFile);
}
function getBraceMatchingAtPosition(fileName, position) {
var sourceFile = getCurrentSourceFile(fileName);
var result = [];
var token = ts.getTouchingToken(sourceFile, position);
if (token.getStart(sourceFile) === position) {
var matchKind = getMatchingTokenKind(token);
if (matchKind) {
var parentElement = token.parent;
var childNodes = parentElement.getChildren(sourceFile);
for (var i = 0, n = childNodes.length; i < n; i++) {
var current = childNodes[i];
if (current.kind === matchKind) {
var range1 = ts.createTextSpan(token.getStart(sourceFile), token.getWidth(sourceFile));
var range2 = ts.createTextSpan(current.getStart(sourceFile), current.getWidth(sourceFile));
if (range1.start < range2.start) {
result.push(range1, range2);
}
else {
result.push(range2, range1);
}
break;
}
}
}
}
return result;
function getMatchingTokenKind(token) {
switch (token.kind) {
case 14: return 15;
case 16: return 17;
case 18: return 19;
case 24: return 25;
case 15: return 14;
case 17: return 16;
case 19: return 18;
case 25: return 24;
}
return undefined;
}
}
function getIndentationAtPosition(fileName, position, editorOptions) {
fileName = ts.normalizeSlashes(fileName);
var start = new Date().getTime();
var sourceFile = getCurrentSourceFile(fileName);
log("getIndentationAtPosition: getCurrentSourceFile: " + (new Date().getTime() - start));
var start = new Date().getTime();
var result = ts.formatting.SmartIndenter.getIndentation(position, sourceFile, editorOptions);
log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start));
return result;
}
function getFormattingEditsForRange(fileName, start, end, options) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
return ts.formatting.formatSelection(start, end, sourceFile, getRuleProvider(options), options);
}
function getFormattingEditsForDocument(fileName, options) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
return ts.formatting.formatDocument(sourceFile, getRuleProvider(options), options);
}
function getFormattingEditsAfterKeystroke(fileName, position, key, options) {
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getCurrentSourceFile(fileName);
if (key === "}") {
return ts.formatting.formatOnClosingCurly(position, sourceFile, getRuleProvider(options), options);
}
else if (key === ";") {
return ts.formatting.formatOnSemicolon(position, sourceFile, getRuleProvider(options), options);
}
else if (key === "\n") {
return ts.formatting.formatOnEnter(position, sourceFile, getRuleProvider(options), options);
}
return [];
}
function getTodoComments(fileName, descriptors) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
cancellationToken.throwIfCancellationRequested();
var fileContents = sourceFile.text;
var result = [];
if (descriptors.length > 0) {
var regExp = getTodoCommentsRegExp();
var matchArray;
while (matchArray = regExp.exec(fileContents)) {
cancellationToken.throwIfCancellationRequested();
var firstDescriptorCaptureIndex = 3;
ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex);
var preamble = matchArray[1];
var matchPosition = matchArray.index + preamble.length;
var token = ts.getTokenAtPosition(sourceFile, matchPosition);
if (!isInsideComment(sourceFile, token, matchPosition)) {
continue;
}
var descriptor = undefined;
for (var i = 0, n = descriptors.length; i < n; i++) {
if (matchArray[i + firstDescriptorCaptureIndex]) {
descriptor = descriptors[i];
}
}
ts.Debug.assert(descriptor !== undefined);
if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) {
continue;
}
var message = matchArray[2];
result.push({
descriptor: descriptor,
message: message,
position: matchPosition
});
}
}
return result;
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function getTodoCommentsRegExp() {
var singleLineCommentStart = /(?:\/\/+\s*)/.source;
var multiLineCommentStart = /(?:\/\*+\s*)/.source;
var anyNumberOfSpacesAndAsterixesAtStartOfLine = /(?:^(?:\s|\*)*)/.source;
var preamble = "(" + anyNumberOfSpacesAndAsterixesAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")";
var literals = "(?:" + ts.map(descriptors, function (d) { return "(" + escapeRegExp(d.text) + ")"; }).join("|") + ")";
var endOfLineOrEndOfComment = /(?:$|\*\/)/.source;
var messageRemainder = /(?:.*?)/.source;
var messagePortion = "(" + literals + messageRemainder + ")";
var regExpString = preamble + messagePortion + endOfLineOrEndOfComment;
return new RegExp(regExpString, "gim");
}
function isLetterOrDigit(char) {
return (char >= 97 && char <= 122) ||
(char >= 65 && char <= 90) ||
(char >= 48 && char <= 57);
}
}
function getRenameInfo(fileName, position) {
synchronizeHostData();
fileName = ts.normalizeSlashes(fileName);
var sourceFile = getValidSourceFile(fileName);
var node = ts.getTouchingWord(sourceFile, position);
if (node && node.kind === 64) {
var symbol = typeInfoResolver.getSymbolAtLocation(node);
if (symbol) {
var declarations = symbol.getDeclarations();
if (declarations && declarations.length > 0) {
var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings());
if (defaultLibFileName) {
for (var i = 0; i < declarations.length; i++) {
var sourceFile = declarations[i].getSourceFile();
if (sourceFile && getCanonicalFileName(ts.normalizePath(sourceFile.fileName)) === getCanonicalFileName(ts.normalizePath(defaultLibFileName))) {
return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library.key));
}
}
}
var kind = getSymbolKind(symbol, typeInfoResolver, node);
if (kind) {
return {
canRename: true,
localizedErrorMessage: undefined,
displayName: symbol.name,
fullDisplayName: typeInfoResolver.getFullyQualifiedName(symbol),
kind: kind,
kindModifiers: getSymbolModifiers(symbol),
triggerSpan: ts.createTextSpan(node.getStart(), node.getWidth())
};
}
}
}
}
return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element.key));
function getRenameInfoError(localizedErrorMessage) {
return {
canRename: false,
localizedErrorMessage: localizedErrorMessage,
displayName: undefined,
fullDisplayName: undefined,
kind: undefined,
kindModifiers: undefined,
triggerSpan: undefined
};
}
}
return {
dispose: dispose,
cleanupSemanticCache: cleanupSemanticCache,
getSyntacticDiagnostics: getSyntacticDiagnostics,
getSemanticDiagnostics: getSemanticDiagnostics,
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
getSyntacticClassifications: getSyntacticClassifications,
getSemanticClassifications: getSemanticClassifications,
getCompletionsAtPosition: getCompletionsAtPosition,
getCompletionEntryDetails: getCompletionEntryDetails,
getSignatureHelpItems: getSignatureHelpItems,
getQuickInfoAtPosition: getQuickInfoAtPosition,
getDefinitionAtPosition: getDefinitionAtPosition,
getReferencesAtPosition: getReferencesAtPosition,
getOccurrencesAtPosition: getOccurrencesAtPosition,
getNameOrDottedNameSpan: getNameOrDottedNameSpan,
getBreakpointStatementAtPosition: getBreakpointStatementAtPosition,
getNavigateToItems: getNavigateToItems,
getRenameInfo: getRenameInfo,
findRenameLocations: findRenameLocations,
getNavigationBarItems: getNavigationBarItems,
getOutliningSpans: getOutliningSpans,
getTodoComments: getTodoComments,
getBraceMatchingAtPosition: getBraceMatchingAtPosition,
getIndentationAtPosition: getIndentationAtPosition,
getFormattingEditsForRange: getFormattingEditsForRange,
getFormattingEditsForDocument: getFormattingEditsForDocument,
getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke,
getEmitOutput: getEmitOutput,
getSourceFile: getCurrentSourceFile,
getProgram: getProgram
};
}
ts.createLanguageService = createLanguageService;
function createClassifier() {
var scanner = ts.createScanner(2, false);
var noRegexTable = [];
noRegexTable[64] = true;
noRegexTable[8] = true;
noRegexTable[7] = true;
noRegexTable[9] = true;
noRegexTable[92] = true;
noRegexTable[38] = true;
noRegexTable[39] = true;
noRegexTable[17] = true;
noRegexTable[19] = true;
noRegexTable[15] = true;
noRegexTable[94] = true;
noRegexTable[79] = true;
var templateStack = [];
function isAccessibilityModifier(kind) {
switch (kind) {
case 107:
case 105:
case 106:
return true;
}
return false;
}
function canFollow(keyword1, keyword2) {
if (isAccessibilityModifier(keyword1)) {
if (keyword2 === 114 ||
keyword2 === 118 ||
keyword2 === 112 ||
keyword2 === 108) {
return true;
}
return false;
}
return true;
}
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
var offset = 0;
var token = 0;
var lastNonTriviaToken = 0;
while (templateStack.length > 0) {
templateStack.pop();
}
switch (lexState) {
case 3:
text = '"\\\n' + text;
offset = 3;
break;
case 2:
text = "'\\\n" + text;
offset = 3;
break;
case 1:
text = "/*\n" + text;
offset = 3;
break;
case 4:
text = "`\n" + text;
offset = 2;
break;
case 5:
text = "}\n" + text;
offset = 2;
case 6:
templateStack.push(11);
break;
}
scanner.setText(text);
var result = {
finalLexState: 0,
entries: []
};
var angleBracketStack = 0;
do {
token = scanner.scan();
if (!ts.isTrivia(token)) {
if ((token === 36 || token === 56) && !noRegexTable[lastNonTriviaToken]) {
if (scanner.reScanSlashToken() === 9) {
token = 9;
}
}
else if (lastNonTriviaToken === 20 && isKeyword(token)) {
token = 64;
}
else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
token = 64;
}
else if (lastNonTriviaToken === 64 &&
token === 24) {
angleBracketStack++;
}
else if (token === 25 && angleBracketStack > 0) {
angleBracketStack--;
}
else if (token === 110 ||
token === 119 ||
token === 117 ||
token === 111 ||
token === 120) {
if (angleBracketStack > 0 && !syntacticClassifierAbsent) {
token = 64;
}
}
else if (token === 11) {
templateStack.push(token);
}
else if (token === 14) {
if (templateStack.length > 0) {
templateStack.push(token);
}
}
else if (token === 15) {
if (templateStack.length > 0) {
var lastTemplateStackToken = ts.lastOrUndefined(templateStack);
if (lastTemplateStackToken === 11) {
token = scanner.reScanTemplateToken();
if (token === 13) {
templateStack.pop();
}
else {
ts.Debug.assert(token === 12, "Should have been a template middle. Was " + token);
}
}
else {
ts.Debug.assert(lastTemplateStackToken === 14, "Should have been an open brace. Was: " + token);
templateStack.pop();
}
}
}
lastNonTriviaToken = token;
}
processToken();
} while (token !== 1);
return result;
function processToken() {
var start = scanner.getTokenPos();
var end = scanner.getTextPos();
addResult(end - start, classFromKind(token));
if (end >= text.length) {
if (token === 8) {
var tokenText = scanner.getTokenText();
if (scanner.isUnterminated()) {
var lastCharIndex = tokenText.length - 1;
var numBackslashes = 0;
while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92) {
numBackslashes++;
}
if (numBackslashes & 1) {
var quoteChar = tokenText.charCodeAt(0);
result.finalLexState = quoteChar === 34 ? 3 : 2;
}
}
}
else if (token === 3) {
if (scanner.isUnterminated()) {
result.finalLexState = 1;
}
}
else if (ts.isTemplateLiteralKind(token)) {
if (scanner.isUnterminated()) {
if (token === 13) {
result.finalLexState = 5;
}
else if (token === 10) {
result.finalLexState = 4;
}
else {
ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token);
}
}
}
else if (templateStack.length > 0 && ts.lastOrUndefined(templateStack) === 11) {
result.finalLexState = 6;
}
}
}
function addResult(length, classification) {
if (length > 0) {
if (result.entries.length === 0) {
length -= offset;
}
result.entries.push({ length: length, classification: classification });
}
}
}
function isBinaryExpressionOperatorToken(token) {
switch (token) {
case 35:
case 36:
case 37:
case 33:
case 34:
case 40:
case 41:
case 42:
case 24:
case 25:
case 26:
case 27:
case 86:
case 85:
case 28:
case 29:
case 30:
case 31:
case 43:
case 45:
case 44:
case 48:
case 49:
case 62:
case 61:
case 63:
case 58:
case 59:
case 60:
case 53:
case 54:
case 55:
case 56:
case 57:
case 52:
case 23:
return true;
default: return false;
}
}
function isPrefixUnaryExpressionOperatorToken(token) {
switch (token) {
case 33:
case 34:
case 47:
case 46:
case 38:
case 39:
return true;
default:
return false;
}
}
function isKeyword(token) {
return token >= 65 && token <= 122;
}
function classFromKind(token) {
if (isKeyword(token)) {
return 1;
}
else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
return 2;
}
else if (token >= 14 && token <= 63) {
return 0;
}
switch (token) {
case 7:
return 6;
case 8:
return 7;
case 9:
return 8;
case 6:
case 3:
case 2:
return 3;
case 5:
return 4;
case 64:
default:
if (ts.isTemplateLiteralKind(token)) {
return 7;
}
return 5;
}
}
return { getClassificationsForLine: getClassificationsForLine };
}
ts.createClassifier = createClassifier;
function getDefaultLibFilePath(options) {
if (typeof __dirname !== "undefined") {
return __dirname + ts.directorySeparator + ts.getDefaultLibFileName(options);
}
throw new Error("getDefaultLibFilePath is only supported when consumed as a node module. ");
}
ts.getDefaultLibFilePath = getDefaultLibFilePath;
function initializeServices() {
ts.objectAllocator = {
getNodeConstructor: function (kind) {
function Node() {
}
var proto = kind === 210 ? new SourceFileObject() : new NodeObject();
proto.kind = kind;
proto.pos = 0;
proto.end = 0;
proto.flags = 0;
proto.parent = undefined;
Node.prototype = proto;
return Node;
},
getSymbolConstructor: function () { return SymbolObject; },
getTypeConstructor: function () { return TypeObject; },
getSignatureConstructor: function () { return SignatureObject; }
};
}
initializeServices();
})(ts || (ts = {}));
var ts;
(function (ts) {
var BreakpointResolver;
(function (BreakpointResolver) {
function spanInSourceFileAtLocation(sourceFile, position) {
if (sourceFile.flags & 1024) {
return undefined;
}
var tokenAtLocation = ts.getTokenAtPosition(sourceFile, position);
var lineOfPosition = sourceFile.getLineAndCharacterOfPosition(position).line;
if (sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getStart()).line > lineOfPosition) {
tokenAtLocation = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile);
if (!tokenAtLocation || sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) {
return undefined;
}
}
if (ts.isInAmbientContext(tokenAtLocation)) {
return undefined;
}
return spanInNode(tokenAtLocation);
function textSpan(startNode, endNode) {
return ts.createTextSpanFromBounds(startNode.getStart(), (endNode || startNode).getEnd());
}
function spanInNodeIfStartsOnSameLine(node, otherwiseOnNode) {
if (node && lineOfPosition === sourceFile.getLineAndCharacterOfPosition(node.getStart()).line) {
return spanInNode(node);
}
return spanInNode(otherwiseOnNode);
}
function spanInPreviousNode(node) {
return spanInNode(ts.findPrecedingToken(node.pos, sourceFile));
}
function spanInNextNode(node) {
return spanInNode(ts.findNextToken(node, node.parent));
}
function spanInNode(node) {
if (node) {
if (ts.isExpression(node)) {
if (node.parent.kind === 177) {
return spanInPreviousNode(node);
}
if (node.parent.kind === 179) {
return textSpan(node);
}
if (node.parent.kind === 165 && node.parent.operatorToken.kind === 23) {
return textSpan(node);
}
if (node.parent.kind == 159 && node.parent.body == node) {
return textSpan(node);
}
}
switch (node.kind) {
case 173:
return spanInVariableDeclaration(node.declarationList.declarations[0]);
case 191:
case 128:
case 127:
return spanInVariableDeclaration(node);
case 126:
return spanInParameterDeclaration(node);
case 193:
case 130:
case 129:
case 132:
case 133:
case 131:
case 158:
case 159:
return spanInFunctionDeclaration(node);
case 172:
if (ts.isFunctionBlock(node)) {
return spanInFunctionBlock(node);
}
case 199:
return spanInBlock(node);
case 206:
return spanInBlock(node.block);
case 175:
return textSpan(node.expression);
case 184:
return textSpan(node.getChildAt(0), node.expression);
case 178:
return textSpan(node, ts.findNextToken(node.expression, node));
case 177:
return spanInNode(node.statement);
case 190:
return textSpan(node.getChildAt(0));
case 176:
return textSpan(node, ts.findNextToken(node.expression, node));
case 187:
return spanInNode(node.statement);
case 183:
case 182:
return textSpan(node.getChildAt(0), node.label);
case 179:
return spanInForStatement(node);
case 180:
case 181:
return textSpan(node, ts.findNextToken(node.expression, node));
case 186:
return textSpan(node, ts.findNextToken(node.expression, node));
case 203:
case 204:
return spanInNode(node.statements[0]);
case 189:
return spanInBlock(node.tryBlock);
case 188:
return textSpan(node, node.expression);
case 201:
return textSpan(node, node.exportName);
case 200:
return textSpan(node, node.moduleReference);
case 198:
if (ts.getModuleInstanceState(node) !== 1) {
return undefined;
}
case 194:
case 197:
case 209:
case 153:
case 154:
return textSpan(node);
case 185:
return spanInNode(node.statement);
case 195:
case 196:
return undefined;
case 22:
case 1:
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile));
case 23:
return spanInPreviousNode(node);
case 14:
return spanInOpenBraceToken(node);
case 15:
return spanInCloseBraceToken(node);
case 16:
return spanInOpenParenToken(node);
case 17:
return spanInCloseParenToken(node);
case 51:
return spanInColonToken(node);
case 25:
case 24:
return spanInGreaterThanOrLessThanToken(node);
case 99:
return spanInWhileKeyword(node);
case 75:
case 67:
case 80:
return spanInNextNode(node);
default:
if (node.parent.kind === 207 && node.parent.name === node) {
return spanInNode(node.parent.initializer);
}
if (node.parent.kind === 156 && node.parent.type === node) {
return spanInNode(node.parent.expression);
}
if (ts.isAnyFunction(node.parent) && node.parent.type === node) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
}
function spanInVariableDeclaration(variableDeclaration) {
if (variableDeclaration.parent.parent.kind === 180 ||
variableDeclaration.parent.parent.kind === 181) {
return spanInNode(variableDeclaration.parent.parent);
}
var isParentVariableStatement = variableDeclaration.parent.parent.kind === 173;
var isDeclarationOfForStatement = variableDeclaration.parent.parent.kind === 179 && ts.contains(variableDeclaration.parent.parent.initializer.declarations, variableDeclaration);
var declarations = isParentVariableStatement ? variableDeclaration.parent.parent.declarationList.declarations : isDeclarationOfForStatement ? variableDeclaration.parent.parent.initializer.declarations : undefined;
if (variableDeclaration.initializer || (variableDeclaration.flags & 1)) {
if (declarations && declarations[0] === variableDeclaration) {
if (isParentVariableStatement) {
return textSpan(variableDeclaration.parent, variableDeclaration);
}
else {
ts.Debug.assert(isDeclarationOfForStatement);
return textSpan(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent), variableDeclaration);
}
}
else {
return textSpan(variableDeclaration);
}
}
else if (declarations && declarations[0] !== variableDeclaration) {
var indexOfCurrentDeclaration = ts.indexOf(declarations, variableDeclaration);
return spanInVariableDeclaration(declarations[indexOfCurrentDeclaration - 1]);
}
}
function canHaveSpanInParameterDeclaration(parameter) {
return !!parameter.initializer || parameter.dotDotDotToken !== undefined ||
!!(parameter.flags & 16) || !!(parameter.flags & 32);
}
function spanInParameterDeclaration(parameter) {
if (canHaveSpanInParameterDeclaration(parameter)) {
return textSpan(parameter);
}
else {
var functionDeclaration = parameter.parent;
var indexOfParameter = ts.indexOf(functionDeclaration.parameters, parameter);
if (indexOfParameter) {
return spanInParameterDeclaration(functionDeclaration.parameters[indexOfParameter - 1]);
}
else {
return spanInNode(functionDeclaration.body);
}
}
}
function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
return !!(functionDeclaration.flags & 1) ||
(functionDeclaration.parent.kind === 194 && functionDeclaration.kind !== 131);
}
function spanInFunctionDeclaration(functionDeclaration) {
if (!functionDeclaration.body) {
return undefined;
}
if (canFunctionHaveSpanInWholeDeclaration(functionDeclaration)) {
return textSpan(functionDeclaration);
}
return spanInNode(functionDeclaration.body);
}
function spanInFunctionBlock(block) {
var nodeForSpanInBlock = block.statements.length ? block.statements[0] : block.getLastToken();
if (canFunctionHaveSpanInWholeDeclaration(block.parent)) {
return spanInNodeIfStartsOnSameLine(block.parent, nodeForSpanInBlock);
}
return spanInNode(nodeForSpanInBlock);
}
function spanInBlock(block) {
switch (block.parent.kind) {
case 198:
if (ts.getModuleInstanceState(block.parent) !== 1) {
return undefined;
}
case 178:
case 176:
case 180:
case 181:
return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
case 179:
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
}
return spanInNode(block.statements[0]);
}
function spanInForStatement(forStatement) {
if (forStatement.initializer) {
if (forStatement.initializer.kind === 192) {
var variableDeclarationList = forStatement.initializer;
if (variableDeclarationList.declarations.length > 0) {
return spanInNode(variableDeclarationList.declarations[0]);
}
}
else {
return spanInNode(forStatement.initializer);
}
}
if (forStatement.condition) {
return textSpan(forStatement.condition);
}
if (forStatement.iterator) {
return textSpan(forStatement.iterator);
}
}
function spanInOpenBraceToken(node) {
switch (node.parent.kind) {
case 197:
var enumDeclaration = node.parent;
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
case 194:
var classDeclaration = node.parent;
return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
case 186:
return spanInNodeIfStartsOnSameLine(node.parent, node.parent.clauses[0]);
}
return spanInNode(node.parent);
}
function spanInCloseBraceToken(node) {
switch (node.parent.kind) {
case 199:
if (ts.getModuleInstanceState(node.parent.parent) !== 1) {
return undefined;
}
case 197:
case 194:
return textSpan(node);
case 172:
if (ts.isFunctionBlock(node.parent)) {
return textSpan(node);
}
case 206:
return spanInNode(node.parent.statements[node.parent.statements.length - 1]);
;
case 186:
var switchStatement = node.parent;
var lastClause = switchStatement.clauses[switchStatement.clauses.length - 1];
if (lastClause) {
return spanInNode(lastClause.statements[lastClause.statements.length - 1]);
}
return undefined;
default:
return spanInNode(node.parent);
}
}
function spanInOpenParenToken(node) {
if (node.parent.kind === 177) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
function spanInCloseParenToken(node) {
switch (node.parent.kind) {
case 158:
case 193:
case 159:
case 130:
case 129:
case 132:
case 133:
case 131:
case 178:
case 177:
case 179:
return spanInPreviousNode(node);
default:
return spanInNode(node.parent);
}
return spanInNode(node.parent);
}
function spanInColonToken(node) {
if (ts.isAnyFunction(node.parent) || node.parent.kind === 207) {
return spanInPreviousNode(node);
}
return spanInNode(node.parent);
}
function spanInGreaterThanOrLessThanToken(node) {
if (node.parent.kind === 156) {
return spanInNode(node.parent.expression);
}
return spanInNode(node.parent);
}
function spanInWhileKeyword(node) {
if (node.parent.kind === 177) {
return textSpan(node, ts.findNextToken(node.parent.expression, node.parent));
}
return spanInNode(node.parent);
}
}
}
BreakpointResolver.spanInSourceFileAtLocation = spanInSourceFileAtLocation;
})(BreakpointResolver = ts.BreakpointResolver || (ts.BreakpointResolver = {}));
})(ts || (ts = {}));
var debugObjectHost = this;
var ts;
(function (ts) {
function logInternalError(logger, err) {
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
}
var ScriptSnapshotShimAdapter = (function () {
function ScriptSnapshotShimAdapter(scriptSnapshotShim) {
this.scriptSnapshotShim = scriptSnapshotShim;
this.lineStartPositions = null;
}
ScriptSnapshotShimAdapter.prototype.getText = function (start, end) {
return this.scriptSnapshotShim.getText(start, end);
};
ScriptSnapshotShimAdapter.prototype.getLength = function () {
return this.scriptSnapshotShim.getLength();
};
ScriptSnapshotShimAdapter.prototype.getChangeRange = function (oldSnapshot) {
var oldSnapshotShim = oldSnapshot;
var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim);
if (encoded == null) {
return null;
}
var decoded = JSON.parse(encoded);
return ts.createTextChangeRange(ts.createTextSpan(decoded.span.start, decoded.span.length), decoded.newLength);
};
return ScriptSnapshotShimAdapter;
})();
var LanguageServiceShimHostAdapter = (function () {
function LanguageServiceShimHostAdapter(shimHost) {
this.shimHost = shimHost;
}
LanguageServiceShimHostAdapter.prototype.log = function (s) {
this.shimHost.log(s);
};
LanguageServiceShimHostAdapter.prototype.trace = function (s) {
this.shimHost.trace(s);
};
LanguageServiceShimHostAdapter.prototype.error = function (s) {
this.shimHost.error(s);
};
LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () {
var settingsJson = this.shimHost.getCompilationSettings();
if (settingsJson == null || settingsJson == "") {
throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings");
return null;
}
return JSON.parse(settingsJson);
};
LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () {
var encoded = this.shimHost.getScriptFileNames();
return this.files = JSON.parse(encoded);
};
LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) {
if (this.files && this.files.indexOf(fileName) < 0) {
return undefined;
}
var scriptSnapshot = this.shimHost.getScriptSnapshot(fileName);
return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot);
};
LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) {
return this.shimHost.getScriptVersion(fileName);
};
LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () {
var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages();
if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") {
return null;
}
try {
return JSON.parse(diagnosticMessagesJson);
}
catch (e) {
this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format");
return null;
}
};
LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () {
return this.shimHost.getCancellationToken();
};
LanguageServiceShimHostAdapter.prototype.getCurrentDirectory = function () {
return this.shimHost.getCurrentDirectory();
};
LanguageServiceShimHostAdapter.prototype.getDefaultLibFileName = function (options) {
return this.shimHost.getDefaultLibFileName(JSON.stringify(options));
};
return LanguageServiceShimHostAdapter;
})();
ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter;
function simpleForwardCall(logger, actionDescription, action) {
logger.log(actionDescription);
var start = Date.now();
var result = action();
var end = Date.now();
logger.log(actionDescription + " completed in " + (end - start) + " msec");
if (typeof (result) === "string") {
var str = result;
if (str.length > 128) {
str = str.substring(0, 128) + "...";
}
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
}
return result;
}
function forwardJSONCall(logger, actionDescription, action) {
try {
var result = simpleForwardCall(logger, actionDescription, action);
return JSON.stringify({ result: result });
}
catch (err) {
if (err instanceof ts.OperationCanceledException) {
return JSON.stringify({ canceled: true });
}
logInternalError(logger, err);
err.description = actionDescription;
return JSON.stringify({ error: err });
}
}
var ShimBase = (function () {
function ShimBase(factory) {
this.factory = factory;
factory.registerShim(this);
}
ShimBase.prototype.dispose = function (dummy) {
this.factory.unregisterShim(this);
};
return ShimBase;
})();
var LanguageServiceShimObject = (function (_super) {
__extends(LanguageServiceShimObject, _super);
function LanguageServiceShimObject(factory, host, languageService) {
_super.call(this, factory);
this.host = host;
this.languageService = languageService;
this.logger = this.host;
}
LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
return forwardJSONCall(this.logger, actionDescription, action);
};
LanguageServiceShimObject.prototype.dispose = function (dummy) {
this.logger.log("dispose()");
this.languageService.dispose();
this.languageService = null;
if (debugObjectHost && debugObjectHost.CollectGarbage) {
debugObjectHost.CollectGarbage();
this.logger.log("CollectGarbage()");
}
this.logger = null;
_super.prototype.dispose.call(this, dummy);
};
LanguageServiceShimObject.prototype.refresh = function (throwOnError) {
this.forwardJSONCall("refresh(" + throwOnError + ")", function () {
return null;
});
};
LanguageServiceShimObject.prototype.cleanupSemanticCache = function () {
var _this = this;
this.forwardJSONCall("cleanupSemanticCache()", function () {
_this.languageService.cleanupSemanticCache();
return null;
});
};
LanguageServiceShimObject.prototype.realizeDiagnostics = function (diagnostics) {
var _this = this;
var newLine = this.getNewLine();
return diagnostics.map(function (d) { return _this.realizeDiagnostic(d, newLine); });
};
LanguageServiceShimObject.prototype.realizeDiagnostic = function (diagnostic, newLine) {
return {
message: ts.flattenDiagnosticMessageText(diagnostic.messageText, newLine),
start: diagnostic.start,
length: diagnostic.length,
category: ts.DiagnosticCategory[diagnostic.category].toLowerCase(),
code: diagnostic.code
};
};
LanguageServiceShimObject.prototype.getSyntacticClassifications = function (fileName, start, length) {
var _this = this;
return this.forwardJSONCall("getSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
var classifications = _this.languageService.getSyntacticClassifications(fileName, ts.createTextSpan(start, length));
return classifications;
});
};
LanguageServiceShimObject.prototype.getSemanticClassifications = function (fileName, start, length) {
var _this = this;
return this.forwardJSONCall("getSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
var classifications = _this.languageService.getSemanticClassifications(fileName, ts.createTextSpan(start, length));
return classifications;
});
};
LanguageServiceShimObject.prototype.getNewLine = function () {
return this.host.getNewLine ? this.host.getNewLine() : "\r\n";
};
LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) {
var _this = this;
return this.forwardJSONCall("getSyntacticDiagnostics('" + fileName + "')", function () {
var diagnostics = _this.languageService.getSyntacticDiagnostics(fileName);
return _this.realizeDiagnostics(diagnostics);
});
};
LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) {
var _this = this;
return this.forwardJSONCall("getSemanticDiagnostics('" + fileName + "')", function () {
var diagnostics = _this.languageService.getSemanticDiagnostics(fileName);
return _this.realizeDiagnostics(diagnostics);
});
};
LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () {
var _this = this;
return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () {
var diagnostics = _this.languageService.getCompilerOptionsDiagnostics();
return _this.realizeDiagnostics(diagnostics);
});
};
LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getQuickInfoAtPosition('" + fileName + "', " + position + ")", function () {
var quickInfo = _this.languageService.getQuickInfoAtPosition(fileName, position);
return quickInfo;
});
};
LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) {
var _this = this;
return this.forwardJSONCall("getNameOrDottedNameSpan('" + fileName + "', " + startPos + ", " + endPos + ")", function () {
var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos);
return spanInfo;
});
};
LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getBreakpointStatementAtPosition('" + fileName + "', " + position + ")", function () {
var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position);
return spanInfo;
});
};
LanguageServiceShimObject.prototype.getSignatureHelpItems = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getSignatureHelpItems('" + fileName + "', " + position + ")", function () {
var signatureInfo = _this.languageService.getSignatureHelpItems(fileName, position);
return signatureInfo;
});
};
LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getDefinitionAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getDefinitionAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getRenameInfo = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getRenameInfo('" + fileName + "', " + position + ")", function () {
return _this.languageService.getRenameInfo(fileName, position);
});
};
LanguageServiceShimObject.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) {
var _this = this;
return this.forwardJSONCall("findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")", function () {
return _this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments);
});
};
LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () {
var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position);
return textRanges;
});
};
LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) {
var _this = this;
return this.forwardJSONCall("getIndentationAtPosition('" + fileName + "', " + position + ")", function () {
var localOptions = JSON.parse(options);
return _this.languageService.getIndentationAtPosition(fileName, position, localOptions);
});
};
LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getReferencesAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getReferencesAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getOccurrencesAtPosition('" + fileName + "', " + position + ")", function () {
return _this.languageService.getOccurrencesAtPosition(fileName, position);
});
};
LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position) {
var _this = this;
return this.forwardJSONCall("getCompletionsAtPosition('" + fileName + "', " + position + ")", function () {
var completion = _this.languageService.getCompletionsAtPosition(fileName, position);
return completion;
});
};
LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName) {
var _this = this;
return this.forwardJSONCall("getCompletionEntryDetails('" + fileName + "', " + position + ", " + entryName + ")", function () {
var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName);
return details;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, start, end, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsForRange('" + fileName + "', " + start + ", " + end + ")", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsForDocument('" + fileName + "')", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsForDocument(fileName, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) {
var _this = this;
return this.forwardJSONCall("getFormattingEditsAfterKeystroke('" + fileName + "', " + position + ", '" + key + "')", function () {
var localOptions = JSON.parse(options);
var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions);
return edits;
});
};
LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue, maxResultCount) {
var _this = this;
return this.forwardJSONCall("getNavigateToItems('" + searchValue + "', " + maxResultCount + ")", function () {
var items = _this.languageService.getNavigateToItems(searchValue, maxResultCount);
return items;
});
};
LanguageServiceShimObject.prototype.getNavigationBarItems = function (fileName) {
var _this = this;
return this.forwardJSONCall("getNavigationBarItems('" + fileName + "')", function () {
var items = _this.languageService.getNavigationBarItems(fileName);
return items;
});
};
LanguageServiceShimObject.prototype.getOutliningSpans = function (fileName) {
var _this = this;
return this.forwardJSONCall("getOutliningSpans('" + fileName + "')", function () {
var items = _this.languageService.getOutliningSpans(fileName);
return items;
});
};
LanguageServiceShimObject.prototype.getTodoComments = function (fileName, descriptors) {
var _this = this;
return this.forwardJSONCall("getTodoComments('" + fileName + "')", function () {
var items = _this.languageService.getTodoComments(fileName, JSON.parse(descriptors));
return items;
});
};
LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
var _this = this;
return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () {
var output = _this.languageService.getEmitOutput(fileName);
output.emitOutputStatus = output.emitSkipped ? 1 : 0;
return output;
});
};
return LanguageServiceShimObject;
})(ShimBase);
var ClassifierShimObject = (function (_super) {
__extends(ClassifierShimObject, _super);
function ClassifierShimObject(factory) {
_super.call(this, factory);
this.classifier = ts.createClassifier();
}
ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) {
var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics);
var items = classification.entries;
var result = "";
for (var i = 0; i < items.length; i++) {
result += items[i].length + "\n";
result += items[i].classification + "\n";
}
result += classification.finalLexState;
return result;
};
return ClassifierShimObject;
})(ShimBase);
var CoreServicesShimObject = (function (_super) {
__extends(CoreServicesShimObject, _super);
function CoreServicesShimObject(factory, logger) {
_super.call(this, factory);
this.logger = logger;
}
CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
return forwardJSONCall(this.logger, actionDescription, action);
};
CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) {
return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () {
var result = ts.preProcessFile(sourceTextSnapshot.getText(0, sourceTextSnapshot.getLength()));
var convertResult = {
referencedFiles: [],
importedFiles: [],
isLibFile: result.isLibFile
};
ts.forEach(result.referencedFiles, function (refFile) {
convertResult.referencedFiles.push({
path: ts.normalizePath(refFile.fileName),
position: refFile.pos,
length: refFile.end - refFile.pos
});
});
ts.forEach(result.importedFiles, function (importedFile) {
convertResult.importedFiles.push({
path: ts.normalizeSlashes(importedFile.fileName),
position: importedFile.pos,
length: importedFile.end - importedFile.pos
});
});
return convertResult;
});
};
CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () {
return this.forwardJSONCall("getDefaultCompilationSettings()", function () {
return ts.getDefaultCompilerOptions();
});
};
return CoreServicesShimObject;
})(ShimBase);
var TypeScriptServicesFactory = (function () {
function TypeScriptServicesFactory() {
this._shims = [];
this.documentRegistry = ts.createDocumentRegistry();
}
TypeScriptServicesFactory.prototype.getServicesVersion = function () {
return ts.servicesVersion;
};
TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) {
try {
var hostAdapter = new LanguageServiceShimHostAdapter(host);
var languageService = ts.createLanguageService(hostAdapter, this.documentRegistry);
return new LanguageServiceShimObject(this, host, languageService);
}
catch (err) {
logInternalError(host, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) {
try {
return new ClassifierShimObject(this);
}
catch (err) {
logInternalError(logger, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.createCoreServicesShim = function (logger) {
try {
return new CoreServicesShimObject(this, logger);
}
catch (err) {
logInternalError(logger, err);
throw err;
}
};
TypeScriptServicesFactory.prototype.close = function () {
this._shims = [];
this.documentRegistry = ts.createDocumentRegistry();
};
TypeScriptServicesFactory.prototype.registerShim = function (shim) {
this._shims.push(shim);
};
TypeScriptServicesFactory.prototype.unregisterShim = function (shim) {
for (var i = 0, n = this._shims.length; i < n; i++) {
if (this._shims[i] === shim) {
delete this._shims[i];
return;
}
}
throw new Error("Invalid operation");
};
return TypeScriptServicesFactory;
})();
ts.TypeScriptServicesFactory = TypeScriptServicesFactory;
if (typeof module !== "undefined" && module.exports) {
module.exports = ts;
}
})(ts || (ts = {}));
var TypeScript;
(function (TypeScript) {
var Services;
(function (Services) {
Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory;
})(Services = TypeScript.Services || (TypeScript.Services = {}));
})(TypeScript || (TypeScript = {}));